文件类型指示符,sys / stat.h st_mode常规文件代码值

时间:2009-06-25 00:27:32

标签: filesystems file-type

我正在尝试识别目录条目的文件类型(Windows Unix等等。)。

在sys / stat.h中,st_mode字的高阶nybble具有编码值:

#define S_IFDIR  0x4000  /* directory */
#define S_IFIFO  0x1000  /* FIFO special */
#define S_IFCHR  0x2000  /* character special */
#define S_IFBLK  0x3000  /* block special */
#define S_IFREG  0x8000  /* or just 0x0000, regular */

从评论中可以看出,nybble可以代表0或8 一个'常规文件'。

所以这就引出了一个问题:它在什么情况下是0而不是8? 如果我已经定义了这些代码,我会保留0来代替 未知/未定义/无效/非文件或类似内容。

确实S_ISREG宏是:

#define S_ISREG(m)  ((m) & S_IFREG)

在我看来,这表明应该是常规文件 总是应该有代码8(0会是一个abberation?)。

将0解释为未知或无效文件并忽略'或仅0x0000'注释并始终期望8用于所有常规文件是否是一个有效的假设?

2 个答案:

答案 0 :(得分:1)

大多数消息来源表明检查S_ISREG就足够了;我不确定你什么时候会看到0x0000作为“常规”文件。

我相信一些旧的实现使用了0x0000(一个非常古老的DJGPP标头搜索将其转换为此)但它是我能找到的唯一真正的引用。其他一切都指向0x8000。

基本上,使用S_ISREG宏并希望你正在编译的任何标题都是正确的。

答案 1 :(得分:0)

我相信S_IFREG和S_ISREG的定义。我从未使用破坏这些宏的文件系统。

我的猜测是,常规文件的0x0000定义是处理可能使用不同文件类型信息编码的旧文件系统。您使用的操作系统和文件系统是什么?