非设备文件上的 major(stat.st_rdev) 和 minor(stat.st_rdev)
major(stat.st_rdev) and minor(stat.st_rdev) on non-device files
简单问题:在Linux中,我stat()
一个不是设备的文件。 st_rdev
字段的期望值是多少?我可以 运行 major(stat.st_rdev)
和 minor(stat.st_rdev)
吗?如果是这样,预期的 return 值是多少?
代码示例:
struct stat sstat = stat("myfileordevice");
ProcessFileOrDevice("myfileordevice",
sstat.st_mode,
major(stat.st_rdev),
minor(stat.st_rdev));
What value stat.st_rdev
should have if I stat()
a non-device filesystem entry?
这取决于条目所在的文件系统。 Linux(例如fs/stat.c
)中的内部结构和函数允许每个文件系统定义值。
一般情况下,该值应为零。快速测试 (stat -c '%t:%T' some-files-and-directories
) 表明它往往是。我只是找不到任何保证或声称它 应该 为零。
Is it safe to use major(stat.st_rdev)
and minor(stat.st_rdev)
当然;他们只对指定值应用一些算术,return结果。
就我个人而言,我倾向于使用
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
手册页包含更多有用的详细信息。
简单问题:在Linux中,我stat()
一个不是设备的文件。 st_rdev
字段的期望值是多少?我可以 运行 major(stat.st_rdev)
和 minor(stat.st_rdev)
吗?如果是这样,预期的 return 值是多少?
代码示例:
struct stat sstat = stat("myfileordevice");
ProcessFileOrDevice("myfileordevice",
sstat.st_mode,
major(stat.st_rdev),
minor(stat.st_rdev));
What value
stat.st_rdev
should have if Istat()
a non-device filesystem entry?
这取决于条目所在的文件系统。 Linux(例如fs/stat.c
)中的内部结构和函数允许每个文件系统定义值。
一般情况下,该值应为零。快速测试 (stat -c '%t:%T' some-files-and-directories
) 表明它往往是。我只是找不到任何保证或声称它 应该 为零。
Is it safe to use
major(stat.st_rdev)
and minor(stat.st_rdev)
当然;他们只对指定值应用一些算术,return结果。
就我个人而言,我倾向于使用
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
手册页包含更多有用的详细信息。