c - FUSE文件系统操作



如何遍历FUSE文件系统的超级块中的索引节点?

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

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

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

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

大多数FUSE应用程序实现stat,并提供了一个真正的INODE结构应该具有的大部分信息,然而,这些信息通常不具有指向它的指针方面。

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

最新更新