[英]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 device\n"); break;
case S_IFCHR: printf("character device\n"); break;
case S_IFDIR: printf("directory\n"); break;
case S_IFIFO: printf("FIFO/pipe\n"); break;
case S_IFLNK: printf("symlink\n"); break;
case S_IFREG: printf("regular file\n"); break;
case S_IFSOCK: printf("socket\n"); break;
default: printf("unknown?\n"); break;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.