7

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

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

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

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

4

1 回答 1

2

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