我正在寻找一种方法来检查并确保文件可读、可写且存在,如果不是,我想打印一条消息来说明这一点。我相信我正在寻找的信息可以使用fstat()找到,我只是不知道获取它的正确方法。
如果open设置了一个特定的errno,如果我试图用O_RDRW打开一个不可读、不可写或不存在的文件,我认为这将是理想的解决方案。
以下是我尝试过的:
//function to open the file
int f_open(const char *filename){
int fid;
if ((fid = open (filename, O_RDWR)) < -1){
return -1;
}
struct stat fileStat;
if (fstat(fid, &fileStat) < 0){
return -1;
}
//check write permission
if (!S_IWUSR(fileStat.st_mode)){
printf("Not writeablen");
return -1;
}
//check read permissions
if (!S_IRUSR(fileStat.st_mode)){
printf("Not readablen");
return -1;
}
return fid;
}
当我尝试编译时,我收到以下错误:
tester.c: In function 'f_open':
tester.c:56:14: error: called object '128' is not a function
tester.c:60:14: error: called object '256' is not a function
您使用的宏是位值,而不是函数。
//check write permission
if ((S_IWUSR & fileStat.st_mode) == 0){
printf("Not writeablen");
return -1;
}
示例如下:http://codewiki.wikidot.com/c:system-调用:fstat
编辑:上面提到的"访问"功能是一个更好的选择IWUSR不会告诉你是否可以写,它会"告诉"你所有者是否可以。
您可以使用access
进行权限检查
int rw = access(filename, R_OK | W_OK);
if (rw == 0) {
/* read/write granted */
}