在Linux上用FUSE实现asynchronous文件系统

我试图询问FUSE的邮件列表,但到目前为止我还没有收到任何回应…我有几个问题。 我要实现一个低级FUSE文件系统,并通过epoll监视fuse_chan的描述符。

  1. 我必须伪造我的文件系统中的所有对象的inode? 在VFS中有没有关于selectinode的规则(例如,我只能使用正值还是可以使用某些值)?

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

  3. buffer size呢? 我看到在fuse_loop()为每个调用分配一个新的缓冲区,所以我假设缓冲区大小不固定。 但是,也许有一些最大可能的缓冲区大小? 然后我可以分配一个更大的缓冲区并减less内存分配操作。

(1)Inode被定义为无符号整数,所以理论上可以使用任何值。 但是,由于可能有不小心的程序,所以我会安全地使用它,并且只使用非INT_MAX的正整数。

(2)保险丝使用特殊的内核器件。 虽然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 */