📜  linux中的访问命令示例

📅  最后修改于: 2022-05-13 01:57:05.134000             🧑  作者: Mango

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,我们得到错误消息,原因是调用进程失败。