我试图在 FUSE 的邮件列表上提问,但到目前为止我还没有收到任何回复……我有几个问题。我将实现一个低级 FUSE 文件系统并使用 epoll 监视 fuse_chan
的描述符。
我必须为所有人伪造 inode 我的文件系统中的对象对吗?是 选择有什么规则 VFS 中对象的 inode (例如,我 必须只使用正值或 我可以使用某个范围内的值吗)?
我可以制作 fuse_chan 的描述符吗 非阻塞?如果是,请告诉我 我是否可以假设
fuse_chan_recv()
/fuse_chan_send()
将接收/发送整个请求 结构,还是我必须覆盖它们 具有处理部分发送的功能 并接收?缓冲区大小
怎么样?我看到 在fuse_loop()
中,一个新的缓冲区是 分配给每个电话,所以我假设 缓冲区大小不固定。 但是也许有一些最大值 可能的缓冲区大小?那我可以 分配更大的缓冲区并减少 内存分配操作。
最佳答案
(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 */
关于linux - 在 Linux 上用 FUSE 实现异步文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4794292/