#include <unistd.h>
int access(const char \*pathname, int mode);
pathname:指定要检查的文件路径;支持相对路径(以执行程序所在目录为当前目录)。
mode:名称、值及描述见下表。

Mode Value Description
F_OK 0 test for existence of file
X_OK 1 test for execute or search permission
W_OK 2 test for write permission
R_OK 4 test for read permission

mode值取为F_OK时,则用于判断文件是否存在;返回值为0表示存在;否则返回-1。
mode取值为其它时,则用于判断文件存在且是否有相应的权限;返回值为0表示存在且相应的权限;否则返回-1。
mode支持OR操作,同时判断X_OK W_OK R_OK的任意组合。

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* path:要检查的文件路径。
* 返回值1:文件存在;否则返回0。
*/
static int existFile(const char * path) {
// include <unistd.h>
// F_OK:test for existence of file
int access_result = access(path, F_OK);
if (access_result == -1) {
return 0;
} else {
return 1;
}
}

使用示例:

1
2
3
4
5
if (existFile("file.name")) {
printf("exist.");
} else {
printf("not exist.");
}

后记:
access()判断失败时,可能的错误代码为:
错误码皆在errno.h中定义。

EACCESS 参数pathname 所指定的文件不符合所要求测试的权限。
EROFS 欲测试写入权限的文件存在于只读文件系统内。
EFAULT 参数pathname指针超出可存取内存空间。
EINVAL 参数mode 不正确。
ENAMETOOLONG 参数pathname太长。
ENOTDIR 参数pathname为一目录。
ENOMEM 核心内存不足
ELOOP 参数pathname有过多符号连接问题。
EIO I/O 存取错误。