好吧,我正在做C和我的程序,我有一个问题。我必须使用以下格式显示文件权限:
drwxr-xr-x
但我将权限作为int获取,因为这会将此值返回为int:
lstat(file->d_name, &info);
printf("%d \n", info.st_mode);
这显示例如:$ 33188
如何将int权限转换为drwxr-xr-x
?
非常感谢。
问候。
答案 0 :(得分:3)
文件的模式是权限和文件类型字段的位集。这些标志在man stat.h
中定义。
您可以从以下模式中提取信息:
switch(mode & S_IFMT) {
case S_IFDIR:
mode_text[0] = 'd';
break;
/* add other possibilities here */
default:
mode_text[0] = '-';
}
mode_text[1]= (mode & S_IRUSR) ? 'r' : '-';
mode_text[2]= (mode & S_IWUSR) ? 'w' : '-';
/* the third one is special; can indicates setuid as well */
mode_text[3]= (mode & S_IXUSR) ? (mode & S_ISUID) ? 's' : 'x' : '-';
等。对于团体,其他人。
答案 1 :(得分:2)
chmod
的文档描述了两者之间的关系。
答案 2 :(得分:0)
info coreutils ls
文档告诉您ls
如何决定如何翻译st_mode
文件模式位。但是,对于ls
的基本实现,您可以依次检查每个适当的位并输出相应的字母(如果已设置)或-
(如果不是)。