access和faccess函数按实际用户ID和实际组ID进行访问权限测试。
#include<unistd.h>
int access(const char *pathname, int mode);
int faccess(int fd, const char *pathname, int mode, int flag);
参数:
pathname:文件路径名
mode:要测试的操作模式
mode | 说明 |
---|---|
F_OK | 测试是否存在 |
R_OK | 测试读权限 |
W_OK | 测试写权限 |
X_OK | 测试执行权限 |
faccessat与access在两种情况下是相同的:一种是pathname为决对路径,另一种是fd取值为AT_FDCWD而pathname为相对路径。否则,faccessat计算相对于打开目录(由fd参数指向)的pathname。
flag:改变faccessat的行为,若flag为AT_EACCESS,访问检查用的是调用进程的有效用户ID和有效组ID。
#include<unistd.h>
#include<stdio.h>
int main()
{
if(access("test.txt", R_OK)==0) printf("READ OK\n");
if(access("test.txt", W_OK)==0) printf("WRITE OK\n");
if(access("test.txt", X_OK)==0) printf("EXEC OK\n");
if(access("test.txt", F_OK)==0) printf("File exist\n");
return 0;
}