【问题标题】:FUSE's write sequence guaranteesFUSE 的写顺序保证
【发布时间】:2014-07-20 23:59:53
【问题描述】:

write() 实现是否应该假设随机访问,或者是否可以有一些假设,例如它们将按顺序执行,并且偏移量增加?

如果链接到描述 VFS 接口的 POSIX 或 SUS 规范部分,您将获得额外积分。

【问题讨论】:

  • 嗯? Linux 的 VFS 接口是一个实现细节; POSIX、SUS 或任何其他外部标准都没有指定它(尽管可以肯定的是,它尽可能符合它们)。同样,FUSE 也没有被任何标准定义——它是它自己的、由实现定义的野兽。
  • @CharlesDuffy 第一个问题是。我以为它是由 POSIX 或 SUS 规定的,但我找不到。

标签: linux posix fuse sus


【解决方案1】:

当然,随机。 readwrite 接口同时采用大小和偏移量是有原因的。您会注意到fuse_operations 结构中没有 seek 字段;当用户程序在 FUSE 文件上调用 seek/lseek 时,内核文件描述符中的偏移量会更新,但根本不会通知 FUSE fs。稍后的读取和写入只是开始以不同的偏移量出现在您面前,您应该能够处理它。如果您的实现无法实现,您可能应该在无法满足的写入时返回 -EIO

【讨论】:

    【解决方案2】:

    除非你的 FUSE 文件系统有什么不寻常的地方会阻止打开现有文件进行写入,否则你的写入操作实现必须支持写入任何偏移量——应用程序可以写入文件中的任何位置 @987654321 @-ing 在文件打开时,例如

    fd = open("file", O_WRONLY);
    
    lseek(fd, SEEK_SET, 100);
    write(fd, ...);
    
    lseek(fd, SEEK_SET, 0);
    write(fd, ...);
    

    【讨论】:

    • 我可以天真地写下我被告知要写的内容和位置,并在文件大小发生变化时依靠操作系统调用 truncate(),还是必须跟踪写入的最远位置并自己截断它在关闭()?
    猜你喜欢
    • 2021-11-26
    • 1970-01-01
    • 2015-05-08
    • 2017-08-28
    • 2017-09-16
    • 2016-04-29
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多