0

好吧,我正在用 C 语言编写 ls 程序,但我遇到了问题。我必须以这种格式显示文件权限:

drwxr-xr-x

但是我将权限作为 int 获得,因为这会将这个值作为 int 返回:

lstat(file->d_name, &info);
printf("%d \n", info.st_mode);

例如,这显示:$ 33188

如何将 int 权限转换为drwxr-xr-x

非常感谢。

问候。

4

3 回答 3

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' : '-';

等为组,其他。

于 2012-04-12T20:44:39.623 回答
2

的文档chmod描述了两者之间的关系。

于 2012-04-12T20:32:36.647 回答
0

info coreutils ls文档告诉您如何ls决定如何转换st_mode文件模式位。但是,对于基本实现,ls您可以依次检查每个适当的位并输出适当的字母(如果已设置或未设置-)。

于 2012-04-12T20:39:30.553 回答