如何遍历 FUSE 文件系统的超级块中的 inode?该文档对此没有任何规定。
2 回答
FUSE 不是文件系统,也不包含传统的 inode。最好将其视为实现 UNIX 文件系统 API 提供的相反功能。例如,当您打开一个文件时,您会生成一个文件打开系统调用。然后内核接受该系统调用并返回一个文件。
FUSE 所做的是从内核将系统调用重定向到返回用户空间的 FUSE 应用程序。然后应用程序决定如何响应该系统调用并向内核返回一些内容。然后内核将该响应传递回原始调用应用程序。
在许多情况下,当您使用 FUSE 安装某些东西时,您并不是在安装物理介质。当您在 FUSE 文件系统中打开一个文件时,它可能会在某个真实文件系统的某个位置创建一个临时文件,将数据复制到该文件,然后将对 FUSE 文件的大多数文件操作调用重定向到它创建的临时文件.
大多数 FUSE 应用程序都实现了 stat,并提供了真实 INODE 结构所具有的大部分信息,但是,这些信息通常没有指向它的指针方面。
从技术的角度来看,您可以在 FUSE 中实现类似 EXT3 的功能,它将 EXT3 文件系统作为挂载参数作为挂载参数。在这种情况下,您可以想象真正的 INODES,可能带有实际的 INODE 指针。但是,EXT3 的实现可能会相当不受欢迎,因为每个文件系统调用都涉及从用户空间到内核到 FUSE 用户空间到内核到 FUSE 用户空间到内核,然后最终返回到您的应用程序。FUSE 对于性能不重要的文件系统更有意义。
nftw()
您可以通过在活动 FUSE 实例的挂载点调用来遍历可见的(带有条目的) 。您提供的回调将被赋予路径和struct stat
文件系统中的每个条目。您可以通过对返回路径的系统调用与相应的 inode 进行交互。