【发布时间】:2015-06-26 22:57:24
【问题描述】:
我正在尝试在内核模式下获取文件的设备号。我要查找的设备 ID 是 stat 附带的:
大小:1024 块:2 IO 块:1024 目录 设备:700h/1792d 索引节点:2 链接:3 访问:(0755/drwxr-xr-x) Uid:(0/root) Gid:(0/root) 上下文:system_u:object_r:unlabeled_t:s0
我使用 vfs_stat 编写了代码,但没有得到相同的数字
struct kstat sb;
int error = 0;
sb.rdev = 0;
error = vfs_fstat(fd, &sb);
if (error) {
monks_error("Could not get vfs stat %d", error);
}
if (sb.mode == 0060000) {
monks_info("The device number is %d", MINOR(sb.dev));
}
return sb.dev;
不知道这里出了什么问题?
【问题讨论】:
-
请提供更多信息。你得到了什么错误代码,或者你得到了什么数字,与预期的不一样。
-
我得到的错误代码是-9。任何线索为什么会这样?我在内核中
-
错误代码 -9 是
-EBADF。您可能有无效的文件描述符 (fd)。 -
谢谢 .... 我能够从 inode 结构中提取设备 ID,kdev_t 存在于文件系统的超级块中。我可以从中获得次要号码,但不知何故,主要号码并没有好起来。有什么建议在这里使用什么宏吗?我正在使用 MINOR & MAJOR 文件->f_inode->i_sb->s_dev
-
使用
MINOR和MAJOR应该没问题。可能是,返回的主编号是可以的,但你的期望是错误的?在任何情况下,都需要具体示例(当主编号不正确时)以进行进一步调试。
标签: linux linux-kernel linux-device-driver