我想知道文件是目录还是带有stat的常规文件:
#define _DEFAULT_SOURCE
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int is_regular_file(const char *path)
{
struct stat path_stat;
stat(path, &path_stat);
return S_ISREG(path_stat.st_mode);
}
我试用Mac和Linux,当我打印S_ISREG(path_stat.st_mode)时总是等于1而path_stat.st_mode总是等于16877.
答案 0 :(得分:3)
16877
是八进制40755
,表示具有权限40000
的目录(八进制755
)(用户具有完全权限,其他人都具有读取和遍历权限)。如建议的那样,stat
和chmod
手册页很有用。
例如,这是一个屏幕截图,我的directory-editor显示八进制模式(一个选项),而不是通常的符号模式:
答案 1 :(得分:1)
path_stat.st_mode
始终等于16877
st_mode
的值必须按位解释:
低12位是您可以使用chmod
设置的文件访问权限。每个位代表一个文件权限。高4位是文件类型。
16位数16877
的低12位为000111101101
。这种组合意味着:
---rwxr-xr-x
(读取,写入,执行文件的所有者;读取并执行其他人)。这种组合是目录和可执行文件的典型组合。
数字16877
的高4位是4(至少在Linux上的意思):&#34;目录&#34;。
S_ISREG(path_stat.st_mode)
总是等于......
S_ISREG
宏只检查参数的高4位是否具有值:&#34;文件类型是常规文件。&#34;
...总是等于1
这让我有点困惑:16877
应该是一个目录;但是S_ISREG
应该为常规文件返回1,为其他任何东西(例如目录)返回0。