【发布时间】:2014-10-28 18:40:02
【问题描述】:
我有一个 mode_t perms 变量,它存储从另一个函数返回的文件的权限。我需要将文件权限打印为字符串,格式为
rw-r--r-- (0644)
但我得到的是
r--r--r-- (100644)
如何获得正确的权限?我试过谷歌搜索,不明白我做错了什么。 这是我的代码:
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);
【问题讨论】:
-
我怀疑您显示的代码是您拥有的代码,因为这不是有效的功能。请编辑您的帖子以包含 实际 代码。除此之外,这是很好且格式正确的第一个问题。 :)
-
请注意,在 Unix 权限中,
0644通常是一个 八进制 值。如果您使用十进制值(100644 或 644)进行测试,您将看不到预期的结果。 -
例如稍微修改过的代码版本,
%o的八进制输出为perms,按预期工作:ideone.com/IAFmLG -
好的,我看到您的解决方案有效。但是我能对领先的 10 人做些什么呢?那不应该在那里吗?数字 100644 是我获得的文件权限。
标签: c unix permissions