linux中的访问命令示例
在 Linux 中, access命令用于检查调用程序是否可以访问指定的文件。它可用于检查文件是否存在。检查是使用调用进程的真实 UID 和 GID 完成的。
int access(const char *pathname, int mode);
在这里,第一个参数采用目录/文件的路径,第二个参数采用标志R_OK、W_OK、X_OK 或 F_OK 。
- F_OK 标志:用于检查文件是否存在。
- R_OK 标志:用于检查读取权限位。
- W_OK 标志:用于检查写权限位。
- X_OK 标志:用于检查执行权限位。
注意:如果 access() 无法访问该文件,则返回 -1,否则返回 0。
示例 1: F_OK 标志
#include
#include
#include
#include
#include
#include
extern int errno;
int main(int argc, const char *argv[]){
int fd = access("sample.txt", F_OK);
if(fd == -1){
printf("Error Number : %d\n", errno);
perror("Error Description:");
}
else
printf("No error\n");
return 0;
}
说明:在输出中,我们收到消息“无错误”,因为文件存在于当前目录中。如果文件不存在,fd 的值将变为-1。在上面的代码中,我们得到错误的唯一可能方式是指定路径的文件不存在。如果路径名太长,它也会出错。
注意: perror()用于打印错误, errno用于打印错误代码。
示例 2:检查所有权限位(读、写、执行)
#include
#include
#include
#include
#include
#include
extern int errno;
int main(int argc, const char *argv[]){
int fd = access("sample.txt", (R_OK | W_OK) & X_OK);
if(fd == -1){
printf("Error Number : %d\n", errno);
perror("Error Description:");
}
else{
printf("No error\n");
}
return 0;
}
说明:在输出中,设置了写入和执行用户权限位,并且由于我们正在测试(R_OK | W_OK) & X_OK的情况,我们没有收到错误。文件描述符的值为 0。我们可以使用按位运算来决定 access() 系统调用中的模式参数。
示例 3:检查所有权限位(读取、写入、执行)以演示代码如何在出现错误时运行。
#include
#include
#include
#include
#include
#include
extern int errno;
int main(int argc, const char *argv[]){
int fd = access("sample.txt", R_OK & W_OK & X_OK);
if(fd == -1){
printf("Error Number : %d\n", errno);
perror("Error Description:");
}
else{
printf("No error\n");
}
return 0;
}
在这里,fd = -1,我们得到错误消息,原因是调用进程失败。