在Linux上使用FUSE实现异步文件系统

7

我曾试图在FUSE的邮件列表上提问,但到目前为止还没有收到任何回复... 我有几个问题。我将实现一个低级别的FUSE文件系统,并使用epoll监视fuse_chan描述符。

  1. 我必须为我的文件系统中的所有对象伪造inode,对吗?在VFS中选择对象的inode是否有任何规则(例如,我必须仅使用正值或可以使用某些范围内的值)?

  2. 我可以使fuse_chan的描述符非阻塞吗?如果可以,请告诉我是否可以假定fuse_chan_recv()/fuse_chan_send()将接收/发送整个请求结构,还是我必须覆盖它们以处理部分发送和接收的函数?

  3. 那么缓冲区大小呢?我看到在fuse_loop()中每次调用都会分配一个新的缓冲区,因此我认为缓冲区大小不是固定的。然而,也许有一些最大可能的缓冲区大小?那么我可以分配一个更大的缓冲区并减少内存分配操作。


邪恶。666...不要使用FUSE,在Linux内核中实现一个适当的文件系统驱动程序。FUSE很糟糕。 - user405725
1个回答

2
(1) Inodes被定义为无符号整数,理论上可以使用任何值。然而,由于可能存在不小心编写的程序,为了安全起见,我建议只使用非零的、正整数,最大不超过INT_MAX。
(2) Fuse使用特殊的内核设备。虽然fuse_chan_recv()不支持部分读取,但这可能并不需要,因为内核不应该返回部分数据包。
(3) Linux中的文件名最长为4096个字符。这限制了缓冲区大小。
$ grep PATH_MAX /usr/include/linux/limits.h
#define PATH_MAX        4096    /* # chars in a path name including nul */

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接