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

标签 linux fuse

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

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

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

  3. 缓冲区大小怎么样?我看到 在 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/

相关文章:

使用头文件时 C 程序不编译

c++ - 在使用 Qt 制作的 GUI 上按下按钮时启动 shell 脚本

linux - 构建 fusion-exfat 包时出错

linux - FIO : Always write error when direct=1 and use libaio in mergerfs

android - Android 上的 FUSE(用户空间中的文件系统)支持

python - 如何在基于 Fuse 的自定义文件系统中捕获复制/移动文件操作?

linux - Magento:有趣的网址

linux - 验证 VP8 硬件编码/解码是否真的在 Linux 上工作

java - 在 Linux Mint 中打开 Eclipse 时出错; OpenJDK 64 位服务器 VM 警告 : ignoring option MaxPermSize=512m; support was removed in 8. 0

linux - 类似 FUSE 的文件系统