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

时间:2011-01-25 13:52:55

标签: linux fuse

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

  1. 我必须伪造所有的inode 我的文件系统中的对象对不对?是 有选择的规则 VFS中对象的inode(例如我 必须只使用正值或 我可以在某个范围内使用值吗?

  2. 我可以制作fuse_chan的描述符吗? 非阻塞?如果是,请告诉我 我是否可以这样认为 fuse_chan_recv() / fuse_chan_send() 将收到/发送一个完整的请求 结构,或者我必须覆盖它们 功能处理部分发送 并收到?

  3. buffer size怎么样?我看到 在fuse_loop()中有一个新的缓冲区 为每个电话分配,所以我假设 缓冲区大小不固定。 但是也许有一些最大值 缓冲区大小可能?我可以 分配更大的缓冲区并减少 内存分配操作。

1 个答案:

答案 0 :(得分:2)

(1)Inode被定义为无符号整数,因此理论上,您可以使用任何值。 但是,由于可能存在不小心的程序,我会安全地使用它,并且只使用非零,正整数,直到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 */