我试图在FUSE的邮件列表上询问,但到目前为止我还没有收到任何回复......我有几个问题.我将实现一个低级别的FUSE文件系统并fuse_chan使用epoll 监视描述符.
我必须为我的文件系统中的所有对象伪造inode吗?是否有关于为VFS中的对象选择inode的规则(例如,我是否必须仅使用正值,还是可以在某个范围内使用值)?
我可以使fuse_chan的描述符无阻塞吗?如果是,请告诉我是否可以假设
fuse_chan_recv()/ fuse_chan_send()
将接收/发送整个请求结构,或者我是否必须使用处理部分发送和接收的功能覆盖它们?
怎么样buffer size?我看到在fuse_loop()为每个调用分配一个新缓冲区,所以我假设缓冲区大小不固定.但是,可能有一些最大可能的缓冲区大小?然后,我可以分配更大的缓冲区并减少内存分配操作.
(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 */
Run Code Online (Sandbox Code Playgroud)