FUSE文件系统操作

时间:2011-07-16 08:18:48

标签: c fuse

如何遍历FUSE文件系统的超级块中的inode?文档没有说明这一点。

2 个答案:

答案 0 :(得分:4)

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

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

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

大多数FUSE应用程序实现stat,并提供真正的INODE结构所具有的大部分信息,但是,该信息通常不具有指针方面。

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

答案 1 :(得分:4)

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