我试图找出目录项的文件类型(的Windows的Unix等)。

在SYS / stat.h的ST_MODE字的高位半字节具有编码值:

#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 */

从评论似乎半字节可以是0或8代表 一个 '普通文件'。

因此,这引出了一个问题:在什么情况下是0,而不是8? 如果我定义了这些代码,我会保留0至inidicate 未知/未定义/无效/不一个文件或类似的东西。

实际上,S_ISREG宏是:

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

这似乎给我指出一个普通文件应 总是期望有代码8(和0将是一个abberation?)。

难道是一个有效的假设来解释0为未知或无效的文件,而忽略了“或只是为0x0000”注释和总是期望8将被用于所有常规文件?

有帮助吗?

解决方案

大多数来源表明检查S_ISREG是不够的;我不知道什么时候你会看到为0x0000“常规”文件。

我相信一些老的实现中使用为0x0000(一个真正的老DJGPP头搜索会这件事),但它是唯一真正的参考,我可以找到。一切点为0x8000。

基本上,使用S_ISREG宏并希望在任何你正在编译对头部做正确的事。

其他提示

我会信任S_IFREG和S_ISREG的定义。我从来没有与那些破宏的文件系统的工作。

我的猜测是,对于一个普通文件的0×0000定义是处理可能使用的文件类型信息不同的编码遗留文件系统。您使用的是什么操作系统和文件系统?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top