c读取文件的权限

时间:2009-09-16 00:00:20

标签: c permissions

如何检查文件是否在C中具有读取权限?

4 个答案:

答案 0 :(得分:9)

在POSIX中使用access(2)。在标准C中,您可以尝试使用fopen()打开它,看看它是否成功。

如果fopen()返回NULL,您可以尝试使用errno来区分“文件不存在”(errno == ENOENT)和“权限被拒绝”({ {1}})个案例 - 但不幸的是,这两个errno == EACCES值也仅由POSIX定义。

(即使在POSIX上,在大多数情况下,最好的办法是尝试打开文件,然后查看失败的原因,因为使用errno会引入明显的竞争条件。)

答案 1 :(得分:8)

我很喜欢自己使用stat()

答案 2 :(得分:7)

使用access()功能:

if (access(pathname, R_OK) == 0)
{
    /* It's readable by the current user. */
}
如果文件不存在,

errno将设置为ENOENT;如果存在,则EACCES将设置为{{1}}但当前用户无法访问。有关更多错误代码,请参阅the manual page

答案 3 :(得分:1)

有许多方法可以检查文件权限。

一种非常简单的查找权限的方法是int access(const char *path, int amode)。如前所述,除非有错误,否则此方法将运行。您可以使用一些标志:

F_OK:用于检查文件是否存在。

R_OK:用于检查读取权限位。

W_OK:用于检查写许可权位。

X_OK:用于检查执行权限位。

如果文件没有正确的权限,则会引发错误,您可以使用errno进行检索。

int fd = access("sample.txt", F_OK); 
if(fd == -1){ 
        printf("Error Number : %d\n", errno); 
    perror("Error Description:"); 
} 

如果要在检索文件地址时遇到错误,请使用FILE *fopen(const char *filename, const char *mode)。像access()一样,它具有可以检查的标志,例如读或写。区别在于,fopen可以使用字符串而不是常量,并且将返回FILE指针。

FILE *pf = fopen ("fileName.txt", "rb");

Here是如何使用fopen处理错误的好例子

第三种文件检查方法是int chmod(const char *path, mode_t mode)。 chmod()比access()更有用,因为它具有更多标志。取决于您从哪个目录中读取内容,仅使用access()可能会更容易,但是如果您有许多具有不同权限的文件,则chmod()会更有用。

#include <sys/stat.h>
int chmod(const char *path, mode_t mode);

我知道这篇文章来自11年前。我只是想对常见的文件处理方法做一个概述。