【问题标题】:Getting inode from path in Linux Kernel从 Linux 内核中的路径获取 inode
【发布时间】:2010-10-10 16:41:21
【问题描述】:

我目前正在尝试在内核函数中获取给定路径名的 inode。我只有完整的路径名。我试过这样的尝试:

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

但给定路径中的 dentry 无效,结果似乎是这样。然后我想也许可以尝试 stat() 并从中获取 inode 号。但是,这只给了我一个数字,而不是结构 inode。我不知道在不获取现有 inode 并遍历整个 inode 列表的情况下将 inode 编号转换为 inode 的方法。我什至不知道这是否可行。但我当然不想那样做。

有什么简单的方法可以从内核中的 char *pathname 获取结构 inode 吗?

【问题讨论】:

    标签: linux kernel


    【解决方案1】:

    stat() 将在“st_ino”字段中为您提供文件的 inode。

    抱歉,最初对问题的误解。

    如果您想要内核中的实际 inode 结构,我很确定内核本身不会遍历数组或列表来查找 inode 编号(除非列表非常小)。由于内核的代码是公开的,你应该能够找出它是如何工作的,然后做同样的事情。

    【讨论】:

    • 我已经在我的帖子中指出了这一点。但是,这只给了我 inode 编号,而不是获取文件信息所需的结构 inode。
    【解决方案2】:

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

    无论如何,this link 可能会有所帮助。

    【讨论】:

    • 我突然意识到(大约 3 小时后) stat() 足以满足我的需求,因为我只需要这些信息。我变得如此执着于获得 inode,以至于我部分地看不到我的目标。我是从内核中执行此操作的。所以执行 stat() 实际上不是最优的,但会做到。
    • 链接已失效。这就是为什么只有链接的答案不好。
    猜你喜欢
    • 2010-12-17
    • 2015-05-04
    • 2013-04-25
    • 1970-01-01
    • 2013-06-17
    • 2014-04-08
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多