我有一个mode_t perms变量,它存储从另一个函数返回的文件的权限。我需要打印文件的权限为特林,形式如何将文件权限打印为字符串?
rw-r--r-- (0644)
的,但我得到的是
r--r--r-- (100644)
我怎样才能得到正确的权限?我试过Google搜索,并不明白我做错了什么。 这里是我的代码:
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);
我怀疑你显示的代码是你有的代码,因为这不是一个有效的函数。请修改您的帖子以包含* actual *代码。除此之外,这是很好的格式良好的第一个问题。 :) – 2014-10-28 18:44:47
请注意,在Unix权限中,“0644”通常是一个*八进制*值。如果您使用十进制值(100644或644)进行测试,则不会看到您期望的结果。 – 2014-10-28 18:48:20
例如一个稍微修改过的代码版本,用'perm'的八进制输出的'%o',按预期工作:https://ideone.com/IAFmLG – 2014-10-28 18:52:44