我有一個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