我正在尝试检查file_path
指定的文件是否存在且可读。这是我的代码:
if (stat(file_path,&fileStat) > 0 && (fileStat.st_mode & S_IRUSR))
{
puts("SUCCESS");
create_message(OK);
}
您能检测到给定代码的问题吗?部分(fileStat.st_mode & S_IRUSR)
是否正确?
答案 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提供了一个系统调用来完全按照你想要的那样做,所以你也可以使用它。
但正如其他评论者指出的那样,如果你要阅读这个文件,你可以更好地打开它进行阅读,让开放式失败告诉你这个问题。