Dav*_*ler 2 c unix permissions
我有一个 mode_t perms 变量,它存储从另一个函数返回的文件的权限。我需要将文件权限打印为字符串,格式为
rw-r--r-- (0644)
Run Code Online (Sandbox Code Playgroud)
但我得到的是
r--r--r-- (100644)
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得正确的权限?我尝试过谷歌搜索,但不明白我做错了什么。这是我的代码:
void print_perms(mode_t perms)
{
printf( (perms & S_IRUSR) ? "r" : "-");
printf( (perms & S_IWUSR) ? "w" : "-");
printf( (perms & S_IXUSR) ? "x" : "-");
printf( (perms & S_IRGRP) ? "r" : "-");
printf( (perms & S_IWGRP) ? "w" : "-");
printf( (perms & S_IXGRP) ? "x" : "-");
printf( (perms & S_IROTH) ? "r" : "-");
printf( (perms & S_IWOTH) ? "w" : "-");
printf( (perms & S_IXOTH) ? "x" : "-");
}
//later
print_perms(permissions);
printf(" (%d)\n", permissions);
Run Code Online (Sandbox Code Playgroud)
小智 5
首先,UNIX文件权限通常用八进制表示,对应的格式字符串是“%o”,而不是“%d”。rw-r--r-- 确实是0644,但以 C 语言0644 == 420为例(后者是十进制的)。
其次,使用的位数多于代码中指定的 9 位。你实际上应该说类似的话
printf(" (%3o)", perms&0777);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9108 次 |
| 最近记录: |