一、access、faccessat函数
#include <unistd.h>
int access(const char *pathname, int mode);
int faccessat(int fd, const char *pathname, int mode, int flag);
//返回值:成功返回0;出错返回-1
- 功能:这两个函数可以用来测试是否可以操作某些函数、或者测试对某些文件是否可以进行读、写、执行权限
mode参数如下
- 如果文件已经存在,则可以设置为F_OK。或者是下面的常量的按位或
access函数
- 参数1给出文件名,再通过给出的mode参数来判读当前用户对该文件的操作权限
faccessat函数
- 如果fd给出一个目录,pathname给出一个相对路径,则此文件以参数1的目录作为相对目录
- 如果pathname为绝对路径,则fd不起作用
- 如果fd为AT_FDCED且pathname为相对路径,则pathname以当前程序的目录作为相对目录
- 如果flag为AT_EACCESS,则访问检查用的是调用进程的有效用户ID和有效组ID,而不是实际用户ID与实际组ID
二、演示案例
#include<stdio.h>
#include<stdlib.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
if (argc != 2)
printf("usage: a.out <pathname>");
if (access(argv[1], R_OK) < 0)
printf("access error for %s\n", argv[1]);
else
printf("read access OK\n");
if (open(argv[1], O_RDONLY) < 0)
printf("open error for %s\n", argv[1]);
else
printf("open for reading OK\n");
exit(0);
}
- 传入当前access.c文件,可以读取可以打开
- 传入/etc/shadow文件,不可以读取(因为只有root权限才可以)