简单的问题:在linux中,我stat()
一个不是设备的文件。st_rdev
字段的预期值是多少?我可以运行major(stat.st_rdev)
和minor(stat.st_rdev)
吗?如果是,预期的回报值是多少?
代码示例:
struct stat sstat = stat("myfileordevice");
ProcessFileOrDevice("myfileordevice",
sstat.st_mode,
major(stat.st_rdev),
minor(stat.st_rdev));
最佳答案
如果我stat.st_rdev
一个非设备文件系统条目,那么stat()
应该有什么值?
这取决于条目所在的文件系统。linux中的内部结构和函数(如fs/stat.c
)允许每个文件系统定义值。
通常,该值应为零。快速测试(stat -c '%t:%T' some-files-and-directories
)表明它倾向于。我只是找不到任何保证或声称它应该是零。
使用major(stat.st_rdev)
和minor(stat.st rdev)是否安全?
当然,它们只对指定的值应用一些算术运算,并返回结果。
就我个人而言,我倾向于使用
unsigned int maj, min;
struct stat info;
/* stat(), fstat(), fstatat() or something
to fill the info buffer */
if (S_ISCHR(info.st_mode) || S_ISBLK(info.st_mode)) {
maj = major(info.st_rdev);
min = minor(info.sr_rdev);
} else {
maj = 0U;
min = 0U;
}
ProcessFileOrDevice("myfileordevice", info.st_mode, maj, min);
只是为了确定。注意,
ProcessFileOrDevice()
函数也可以自己检查,忽略maj
和min
值,除非S_ISCHR(info.st_mode)
或S_ISBLK(info.st_mode)
值为真。man 2 stat
手册页包含更多有用的详细信息。关于c - 非设备文件上的major(stat.st_rdev)和minor(stat.st_rdev),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31736476/