stat st_mode 总是等于 16877

Max*_*x0u 2 c unix system-calls stat

我想知道文件是目录还是带有 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);
}
Run Code Online (Sandbox Code Playgroud)

我在 Mac 和 Linux 上尝试,当我打印 S_ISREG(path_stat.st_mode) 总是等于 1 并且 path_stat.st_mode 总是等于 16877。

Tho*_*key 7

16877是八进制40755,表示40000具有权限的目录(八进制)755(用户具有完全权限,其他人具有读取和遍历权限)。正如所建议的statchmod手册页和手册页很有用。

例如,这是我的目录编辑器的屏幕截图,显示八进制模式(一个选项)而不是通常的符号模式:

ded 显示八进制权限