gpt4 book ai didi

c - 非设备文件上的 major(stat.st_rdev) 和 minor(stat.st_rdev)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:00 29 4
gpt4 key购买 nike

简单问题:在 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));

最佳答案

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)

当然;它们仅对指定值应用一些算术,并返回结果。

就个人而言,我倾向于使用类似的东西

    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() 函数也可以自己进行检查,并忽略 majmin 值,除非 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com