在Linux内核中获取路径的inode

6

我目前正在尝试在内核函数中为给定的路径名获取一个inode。我只有完整的路径名可用。我已经尝试了以下方法:

user_path_at(AT_FDCWD, buffer, LOOKUP_FOLLOW, &path);

但是给定路径中的目录项似乎无效。我想也许可以尝试使用stat()函数并从中获取inode号码,然而这只会给我一个数字而不是struct inode结构体。我不知道如何将inode号码转换为inode结构体,而不是抓取现有的inode并遍历整个inode列表。而且我甚至不知道那是否可行。但我肯定不想这样做。

在内核中,有没有一种简单的方法可以从char *路径名获取struct inode结构体呢?

2个回答

2

stat()会在"st_ino"字段中给出文件的inode。

抱歉,一开始误解了问题。

如果你想要内核中实际的inode结构体,我很确定内核本身不会遍历一个数组或者链表来查找inode号码(除非该链表非常小)。由于内核代码是公开的,你应该能够找到它是如何做到的,然后也可以这样做。


我已经在我的帖子中提到了这一点。然而,这只给了我i节点号,而不是获取有关文件信息所必需的i节点结构。 - Dan Fego

0

由于struct inode是内核的一部分,而您处于用户空间,因此没有简单的方法。这完全取决于特定的文件系统实现。您确定stat结构中的信息不足以满足您的需求吗?

无论如何,此链接可能会有所帮助。


1
我突然意识到(大约三个小时后)stat()足以满足我的需求,因为我只需要信息。我变得非常执着于获取inode,以至于我在某种程度上失去了目标。而且我是在内核中执行此操作。因此,执行stat()实际上并不是最优的选择,但也可以。 - Dan Fego
1
链接已失效。这就是为什么仅有链接的答案不好的原因。 - MSalters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接