【发布时间】:2017-10-14 15:43:21
【问题描述】:
我想知道一个文件是目录还是带有 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。
【问题讨论】:
-
当返回值为
1时为普通文件。16877的值是文件权限位和文件模式位(以及其他一些东西)的组合。它是一个位图,宏S_ISREG只是从该统计字段中提取一个位。建议阅读man文件stat。
标签: c unix system-calls stat