检查文件存在和读取权限

时间:2018-05-19 22:57:40

标签: c file permissions stat

我正在尝试检查file_path指定的文件是否存在且可读。这是我的代码:

if (stat(file_path,&fileStat) > 0 && (fileStat.st_mode & S_IRUSR))
{
    puts("SUCCESS");
    create_message(OK);
}

您能检测到给定代码的问题吗?部分(fileStat.st_mode & S_IRUSR)是否正确?

1 个答案:

答案 0 :(得分:2)

你不想要stat(),你想要访问()。

if (access(filename, R_OK)) {
    // code to handle missing or unreadable file
} else {
    // code to handle readable file
}

如果你改变了对stat()的返回值的测试,你的代码会工作,就像Jonathan Leffler所指出的那样,但是Unix提供了一个系统调用来完全按照你想要的那样做,所以你也可以使用它。

但正如其他评论者指出的那样,如果你要阅读这个文件,你可以更好地打开它进行阅读,让开放式失败告诉你这个问题。