c++,linux,如何解释“stat64”中文件的模式
c++, linux, how to interpret the mode of a file in `stat64`?
在那里,我试图确定一个文件是文件夹还是文件夹中的文件,
struct dirent **name_list;
int n, i;
n = scandir(".", &name_list, NULL, alphasort);
for(i=0;i<n;i++){
struct stat64 stat_list
stat64(name_list[i]->d_name, &stat_list);
cout << stat_list.st_mode << endl;
}
cout
给出了一些数字,比如"Makefile"的"33188"或"."的"16877"。那么这些数字是什么意思呢?实际上,"33188"似乎是指一个文件,"16877"是指文件夹,但我想知道st_mode
能给出的所有值,我找不到st_mode
的定义位置。
stat
的man
页面有一个表,其中列出了每个标志的含义。
S_IFMT 0170000 bit mask for the file type bit fields
S_IFSOCK 0140000 socket
S_IFLNK 0120000 symbolic link
S_IFREG 0100000 regular file
S_IFBLK 0060000 block device
S_IFDIR 0040000 directory
S_IFCHR 0020000 character device
S_IFIFO 0010000 FIFO
S_ISUID 0004000 set UID bit
S_ISGID 0002000 set-group-ID bit (see below)
S_ISVTX 0001000 sticky bit (see below)
S_IRWXU 00700 mask for file owner permissions
S_IRUSR 00400 owner has read permission
S_IWUSR 00200 owner has write permission
S_IXUSR 00100 owner has execute permission
S_IRWXG 00070 mask for group permissions
S_IRGRP 00040 group has read permission
S_IWGRP 00020 group has write permission
S_IXGRP 00010 group has execute permission
S_IRWXO 00007 mask for permissions for others (not in group)
S_IROTH 00004 others have read permission
S_IWOTH 00002 others have write permission
S_IXOTH 00001 others have execute permission
问题中模式的数字表示以十进制输出,但如果将其转换为八进制,则位字段更有意义。
文件的33188
转换为0o100644
,这意味着它是一个具有所有者读/写和组/其他只读的常规文件。目录的16877
转换为0o40755
,这意味着它是一个具有所有所有者权限的目录,并对组和其他目录进行读取/执行。
我会说:RTM:)
switch (sb.st_mode & S_IFMT) {
case S_IFBLK: printf("block devicen"); break;
case S_IFCHR: printf("character devicen"); break;
case S_IFDIR: printf("directoryn"); break;
case S_IFIFO: printf("FIFO/pipen"); break;
case S_IFLNK: printf("symlinkn"); break;
case S_IFREG: printf("regular filen"); break;
case S_IFSOCK: printf("socketn"); break;
default: printf("unknown?n"); break;
}
相关文章:
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- 如何在 DevC++ 上显示带有中文字母的行?
- VSCode C++调试文件名中包含中文字符的文件时插件损坏
- 提取用中文写的评论,并使用一些脚本将它们翻译成英文
- 使用fstream用中文/日文编写的文本,无法正确读取文件
- 如何将包含中文或韩语的字符串转换为十六进制/字节
- 嵌入式系统中未显示的中文字符(yocto,Qt 5.5.1) - 为什么Qt不使用系统字体?
- 如何在没有错误的情况下展示特殊的中文,韩语,日本角色
- 如何解析 UTF-8 中文字符串
- 为什么这个状态栏输出乱码的中文样字符
- 在VC 6中显示中文
- 翻译演示翻译中文失败,可能是编码失败
- c1xx:致命错误C1083:无法打开源文件-使用某些中文或爪哇语
- 我怎样才能得到中文字符串
- 如何让 FLTK 1.3.0 在 Ubuntu Linux 中支持中文
- 使用atlcov.h/W2A和中文文本的C++Utf-8转换
- gtkmm 中文本字段的意外行为,strncpy
- Linux stat64 这是什么风格
- 通过套接字发送结构并接收中文字母
- 从C/C++中的.csv文件中读取中文字符