我试图比较两个文件名是否通过检查其inode和设备ID是否匹配来引用同一文件。目前,我致电vfs_stat
以获取ID。
问题是,如果我传递vfs_stat
存储在用户空间中的文件名,它可以正常工作,但如果我传递一个文件名,该文件名作为全局变量存储在我的内核模块中,则会错误{{ 1}}
是否有其他方法可以获取ID或比较两个文件是否相同?
答案 0 :(得分:2)
vfs_stat
采用存储在用户空间中的文件名。但是如果你在源代码中跟踪该调用,你会看到(在fs / stat.c中)基本上有两个部分。从用户空间文件名字符串中查找struct path
,然后根据路径结构的内容调用VFS stat操作。所以你可以从内核空间做同样的事情。查看kern_path()
以查找struct path
以查找存储在内核空间中的文件名。从那里,您可以直接致电vfs_getattr()
。完成后不要忘记path_put
。
基本上,您正在使用vfs_fstatat()
的重要位。但也要考虑你是否可以在没有stat调用的情况下进行管理路径结构中的某个地方有一个inode指针,这可能足以满足您的目的。