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

发布于 2024-10-14 08:20:44 字数 534 浏览 7 评论 0原文

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

  1. 我必须为所有人伪造索引节点 我的文件系统中的对象对吧?是 选择有什么规则吗 VFS 中对象的索引节点(例如,我是否 必须仅使用正值或 我可以使用某个范围内的值吗?

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

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

I tried to ask on FUSE's mailing list but I haven't received any response so far... I have a couple of questions. I'm going to implement a low-level FUSE file system and watch over fuse_chan's descriptor with epoll.

  1. I have to fake inodes for all
    objects in my file system right? Are
    there any rules about choosing
    inodes for objects in VFS (e.g. do I
    have to use only positive values or
    can I use values in some range)?

  2. Can I make fuse_chan's descriptor
    nonblocking? If yes, please tell me
    whether I can assume that
    fuse_chan_recv()/fuse_chan_send()
    will receive/send a whole request
    structure, or do I have to override them
    with functions handling partial send
    and receive?

  3. What about buffer size? I see that
    in fuse_loop() a new buffer is
    allocated for each call, so I assume
    that the buffer size is not fixed.
    However maybe there is some maximum
    possible buffer size? I can then
    allocate a larger buffer and reduce
    memory allocation operations.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

对你而言 2024-10-21 08:20:44

(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 */

(1) Inodes are defined as unsigned integers, so in theory, you could use any values.
However, since there could be programs which are not careful, I'd play it safe and only use non-zero, positive integers up to INT_MAX.

(2) Fuse uses a special kernel device. While fuse_chan_recv() do not support partial reads, this may not be required, as kernel should not return partial packets anyway.

(3) Filenames in Linux are max 4096 chars. This puts a limit on a buffer size:

$ grep PATH_MAX /usr/include/linux/limits.h
#define PATH_MAX        4096    /* # chars in a path name including nul */
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文