stat函数用来获取文件信息。
struct stat类型中 有一项是 st_mode,用来检测文件类型和文件权限信息。
用man查阅手册后,找到了如下掩码
S_IRWXU 00700 owner has read, write, and execute permission
S_IRUSR 00400 owner has read permission
S_IWUSR 00200 owner has write permission
S_IXUSR 00100 owner has execute permission
S_IRWXG 00070 group has read, write, and execute permission
S_IRGRP 00040 group has read permission
S_IWGRP 00020 group has write permission
S_IXGRP 00010 group has execute permission
S_IRWXO 00007 others (not in group) have read, write, and execute permission
S_IROTH 00004 others have read permission
S_IWOTH 00002 others have write permission
S_IXOTH 00001 others have execute permission
举个例子,比如这样:
stat(文件名,buf);
if( buf->st_mode & S_IRUSE)
printf("user can read it");
就可以检测属主是否有读取的权限。
我的问题在于 S_IRWXU S_IRWXG S_IRWXO这三个掩码
7用二进制表示就是 111
而111 和100,010,001做与运算,结果都是大于0 的
也就是说,即使其他人只有文件的读取权限
if(buf->st_mode &S_IRWXO)
printf("其他人可读,写,执行"):
这个if后表达式结果依然是“真”
但其他人并没有写入和执行的权限。
是我的用法出错了吗?
关于stat函数的问题
-
- 帖子: 5
- 注册时间: 2019-07-03 9:08
- astolia
- 论坛版主
- 帖子: 6542
- 注册时间: 2008-09-18 13:11
Re: 关于stat函数的问题
当然是你的用法错了。想要同时检测多位,你该写成 if((buf->st_mode & S_IRWXO) == S_IRWXO)
-
- 帖子: 5
- 注册时间: 2019-07-03 9:08