UNIX(编程-文件目录):02---文件权限查看函数(access、faccessat)

一、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权限才可以)

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/89459031
今日推荐