文件类型指示,SYS / stat.h ST_MODE常规文件代码值
-
22-07-2019 - |
题
我试图找出目录项的文件类型(的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定义是处理可能使用的文件类型信息不同的编码遗留文件系统。您使用的是什么操作系统和文件系统?
不隶属于 StackOverflow