我可以在FUSE中实现带有打开文件表的文件系统吗?

时间:2014-04-15 19:49:30

标签: c unix filesystems fuse

我在C中编写了一个文件系统,用于与FUSE接口的家庭作业。到目前为止,我可以挂载我的文件系统,创建和删除文件,列出目录中的文件等,但我对read()write()函数有一些问题。

我的任务规定我的文件系统保留两种打开的文件表,每个进程一个(所以每个进程都有一个打开的文件有自己的打开文件表),还有一个系统范围(每个进程表中的每个条目链接)获取可共享的信息)。当调用read()write()时,将使用调用进程的pid和系统调用中传递的文件描述符参数来查找相应的表条目。

我的问题是FUSE不会在调用read()write()时传递文件描述符,只传递文件的路径,因此我无法在打开的文件表中查找相应的条目。根据建议here,我可以将open()返回的文件decriptor放在struct fuse_file_info参数的文件句柄字段中,但我相信struct fuse_file_info有一对一与我的文件有一个关系,那么那里的文件描述符将始终是最近一次调用open()所产生的文件描述符,这不一定是与后续调用read()或{ {1}}。

我能想到解决问题的唯一方法是强制调用我的文件系统write()open()函数来为每次调用FUSE操作创建和删除表条目{ {1}}和close()。然后我可以将该调用返回的文件描述符传递给read()到我的文件系统的write()open()函数,但这似乎不太合理。如果可能,我希望调用我的文件系统的read()write()与FUSE操作open()和{{1}建立一对一的关系}}

我的主熔丝接口如下所示,如果感兴趣,可以找到here

close()

我想知道是否有人可以提供任何有关我的问题的见解或一般使用FUSE实现打开文件表。非常感谢提前。

1 个答案:

答案 0 :(得分:0)

我只是仔细检查了FUSE源,看起来FUSE每个打开的文件句柄分配一次fuse_file_info,因此它是一对一的打开句柄,而不是文件路径。

然而,本着教你钓鱼的精神,您可以轻松自行检查。给自己写一个小的C测试应用程序。在测试中打开相同的文件两次,并在FUSE的fh字段中放入两个不同的数字,然后从每个打开的文件句柄中读取,并查看fh字段中的内容。