在C中获取文件的权限

时间:2013-11-21 16:37:58

标签: c file-permissions fstat

我正在寻找一种方法来检查并确保文件是可读的,可写的,并且存在,如果不是,我想打印一条消息说明。我相信我正在寻找的信息可以使用fstat()找到,我只是不知道获取它的正确方法。

如果我试图用O_RDRW打开一个不可读,不可写或不存在的文件,如果open设置了一个特定的errno,我认为这将是理想的解决方案。

以下是我的尝试:

//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 writeable\n");
      return -1;
   }
   //check read permissions
   if (!S_IRUSR(fileStat.st_mode)){
    printf("Not readable\n");
    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

2 个答案:

答案 0 :(得分:3)

您可以使用access进行权限检查

int rw = access(filename, R_OK | W_OK);
if (rw == 0) {
    /* read/write granted */
}

答案 1 :(得分:3)

您使用的宏是位值,而不是函数。

//check write permission
if ((S_IWUSR & fileStat.st_mode) == 0){
    printf("Not writeable\n");
    return -1;
}

此处示例:http://codewiki.wikidot.com/c:system-calls:fstat

编辑:上面显示的'访问'功能是一个更好的选择,IWUSR不会告诉你,如果你可以写它,它会告诉你主人是否可以。