Linux内核总是根据进程的有效用户ID和有效组ID来决定一个进程是否有权访问某个文件。因此,在编写调整用户ID的程序时,在读写一个文件之前必须明确检查其用户是否原本就有对此文件的访问权限。为了实现这种确认,需要使用access函数。
一般形式为;
#include<unistd.h>
int access(const char *pathname,int mode);
其中,pathname是希望检验的文件名(包含路径),mode是欲检查的访问权限,如下所示
R_OK 检验调用进程是否有读访问权限
W_OK 检验调用进程是否有写访问权限
X_OK 检验调用进程是否有执行访问权限
F_OK 检验规定的文件是否存在
access检查用户对一个文件的权限情况,根据mode的值检查调用进程对文件pathname是否具有读、写、或执行的权限。若进程实际用户具有mode所指出的权限,access返回0.否则返回-1.
//access测试文件存在与否,是否可读/可写
/*
#include <stdio.h>
#include <unistd.h>
#define NAME "3.txt"
int main(void)
{
int ret = -1;
ret = access(NAME, F_OK);
if (ret < 0)
{
printf("文件不存在 \n");
return -1;
}
else
{
printf("文件存在 ");
}
ret = access(NAME, R_OK);
if (ret < 0)
{
printf("不可读 ");
}
else
{
printf("可读 ");
}
ret = access(NAME, W_OK);
if (ret < 0)
{
printf("不可写 ");
}
else
{
printf("可写 ");
}
ret = access(NAME, X_OK);
if (ret < 0)
{
printf("不可执行 \n");
}
else
{
printf("可执行 \n");
}
return 0;
}