好吧,我正在用 C 语言编写 ls 程序,但我遇到了问题。我必须以这种格式显示文件权限:
drwxr-xr-x
但是我将权限作为 int 获得,因为这会将这个值作为 int 返回:
lstat(file->d_name, &info);
printf("%d \n", info.st_mode);
例如,这显示:$ 33188
如何将 int 权限转换为drwxr-xr-x
?
非常感谢。
问候。
好吧,我正在用 C 语言编写 ls 程序,但我遇到了问题。我必须以这种格式显示文件权限:
drwxr-xr-x
但是我将权限作为 int 获得,因为这会将这个值作为 int 返回:
lstat(file->d_name, &info);
printf("%d \n", info.st_mode);
例如,这显示:$ 33188
如何将 int 权限转换为drwxr-xr-x
?
非常感谢。
问候。
文件的模式是一组权限和文件类型字段。这些标志在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' : '-';
等为组,其他。
的文档chmod
描述了两者之间的关系。
该info coreutils ls
文档告诉您如何ls
决定如何转换st_mode
文件模式位。但是,对于基本实现,ls
您可以依次检查每个适当的位并输出适当的字母(如果已设置或未设置-
)。