2

如何遍历 FUSE 文件系统的超级块中的 inode?该文档对此没有任何规定。

4

2 回答 2

4

FUSE 不是文件系统,也不包含传统的 inode。最好将其视为实现 UNIX 文件系统 API 提供的相反功能。例如,当您打开一个文件时,您会生成一个文件打开系统调用。然后内核接受该系统调用并返回一个文件。

FUSE 所做的是从内核将系统调用重定向到返回用户空间的 FUSE 应用程序。然后应用程序决定如何响应该系统调用并向内核返回一些内容。然后内核将该响应传递回原始调用应用程序。

在许多情况下,当您使用 FUSE 安装某些东西时,您并不是在安装物理介质。当您在 FUSE 文件系统中打开一个文件时,它可能会在某个真实文件系统的某个位置创建一个临时文件,将数据复制到该文件,然后将对 FUSE 文件的大多数文件操作调用重定向到它创建的临时文件.

大多数 FUSE 应用程序都实现了 stat,并提供了真实 INODE 结构所具有的大部分信息,但是,这些信息通常没有指向它的指针方面。

从技术的角度来看,您可以在 FUSE 中实现类似 EXT3 的功能,它将 EXT3 文件系统作为挂载参数作为挂载参数。在这种情况下,您可以想象真正的 INODES,可能带有实际的 INODE 指针。但是,EXT3 的实现可能会相当不受欢迎,因为每个文件系统调用都涉及从用户空间到内核到 FUSE 用户空间到内核到 FUSE 用户空间到内核,然后最终返回到您的应用程序。FUSE 对于性能不重要的文件系统更有意义。

于 2011-08-03T04:46:33.007 回答
4

nftw()您可以通过在活动 FUSE 实例的挂载点调用来遍历可见的(带有条目的) 。您提供的回调将被赋予路径和struct stat文件系统中的每个条目。您可以通过对返回路径的系统调用与相应的 inode 进行交互。

于 2011-08-03T04:57:51.377 回答