stat st_mode 始终等于 16877
stat st_mode is always equal to 16877
我想知道一个文件是目录还是普通文件,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.
16877
是八进制的40755
,表示一个目录(八进制40000
),权限为755
(用户有全权限,其他人有读取和遍历权限).根据建议,stat
和 chmod
手册页很有用。
举个例子,这是我的 directory-editor 显示八进制模式(一个选项)而不是通常的符号模式的屏幕截图:
path_stat.st_mode
is always equal to 16877
st_mode
的值必须按位解释:
低12位是文件访问权限,可以用chmod
设置。每个位代表一个文件权限。高4位为文件类型
16 位数 16877
的低 12 位将是 000111101101
。这个组合意味着:
---rwxr-xr-x
(为文件所有者读、写、执行;为其他人读、执行)。这种组合是目录和可执行文件的典型组合。
数字 16877
的高 4 位是 4(至少 Linux 表示):"Directory".
S_ISREG(path_stat.st_mode)
is always equal to ...
S_ISREG
宏只是检查参数的高 4 位是否具有以下含义的值:"File type is a regular file."
... is always equal to 1
这让我有点困惑:16877
应该是一个目录;但是 S_ISREG
应该 return 1 表示常规文件,0 表示其他任何内容(例如目录)。
我想知道一个文件是目录还是普通文件,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.
16877
是八进制的40755
,表示一个目录(八进制40000
),权限为755
(用户有全权限,其他人有读取和遍历权限).根据建议,stat
和 chmod
手册页很有用。
举个例子,这是我的 directory-editor 显示八进制模式(一个选项)而不是通常的符号模式的屏幕截图:
path_stat.st_mode
is always equal to16877
st_mode
的值必须按位解释:
低12位是文件访问权限,可以用chmod
设置。每个位代表一个文件权限。高4位为文件类型
16 位数 16877
的低 12 位将是 000111101101
。这个组合意味着:
---rwxr-xr-x
(为文件所有者读、写、执行;为其他人读、执行)。这种组合是目录和可执行文件的典型组合。
数字 16877
的高 4 位是 4(至少 Linux 表示):"Directory".
S_ISREG(path_stat.st_mode)
is always equal to ...
S_ISREG
宏只是检查参数的高 4 位是否具有以下含义的值:"File type is a regular file."
... is always equal to 1
这让我有点困惑:16877
应该是一个目录;但是 S_ISREG
应该 return 1 表示常规文件,0 表示其他任何内容(例如目录)。