我想知道一个文件是一个目录还是一个带有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是octal40755,它表示具有权限的目录(octal40000)(用户具有完全权限,其他人都具有读取和遍历权限)。如前所述,755stat手册页很有用。
例如,这里是一个屏幕截图,其中mydirectory-editor显示八进制模式(一个选项),而不是通常的符号模式:
c - stat st_mode始终等于16877-LMLPHP

10-08 04:10