用于检查进程对指定文件或目录的访问权限的系统调用。它可以检查文件是否存在以及当前用户是否具有某种权限(如读、写或执行权限)。
1.头文件
#include
2.函数原型
int access(const char *pathname, int mode);
3.参数
1)pathname:指向要检查的路径名的指针。
2)mode:表示要检查的访问权限的类型,它可以是以下值的组合:
⚫F_OK: 检查文件是否存在。
⚫R_OK: 检查是否具有读取权限。
⚫W_OK: 检查是否具有写入权限。
⚫X_OK: 检查是否具有执行权限。
除了以上单个使用,也可以使用“|”进行组合使用,如:
⚫R_OK | W_OK: 检查读取和写入权限。
⚫R_OK | X_OK: 检查读取和执行权限。
4.返回值
成功返回0,失败返回-1。需要注意的是,如果使用组合使用,只要其中一项不通过,就会返回-1.
5.示例:(使用access检查文件权限)
#include
#include
#include
int main(){
const char *file="file_rw.txt";
int res=0;
printf("flie name:%s\n",file);
res = access(file, F_OK);
if (res == 0)
printf("File exists: OK\n");
else {
printf("File exists: NO\n");
exit(0);
}
res = access(file, R_OK);
if (res == 0)
printf("Read permission: OK\n");
else
printf("Read permission: NO\n");
res = access(file, W_OK);
if (res == 0)
printf("Write permission: OK\n");
else
printf("Write permission: NO\n");
res = access(file, X_OK);
if (res == 0)
printf("Execution permission: OK\n"); else
printf("Execution permission: NO\n");
exit(0);
}
6.创建测试文件并改修权限为766,增加读写权限
$ touch file_rw.txt
$ chmod 643 file_rw.txt
$ ll file_rw.txt
-rw-r---wx 1 elf forlinx 0 8月 23 15:56 file_rw.txt*
7.测试结果
$ ./access_test
flie name:file_rw.txt
File exists: OK
Read permission: OK
Write permission: OK
Execution permission: NO
可以看到文件的执行结果,打印出了测试文件名为file_rw.txt,测试文件存在且有读写权限,并没有执行权限。