Linux可用的文件系统的示例,该文件系统不保证在“write()”之后的“read()”返回已写入的内容?

yebdmbv4  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(102)

Linux write() man page说道:
POSIX要求一个read(2)可以被证明发生在一个write()返回之后,它将返回新的数据。请注意,并非所有文件系统都符合POSIX。
我想它指的是POSIX write() page,它说:
在对常规文件的write()成功返回后:

  • 任何成功的read()从文件中被该写操作修改的每个字节位置返回write()为该位置指定的数据,直到这些字节位置再次被修改。
  • 任何后续成功写入()文件中相同字节位置的操作将覆盖该文件数据。

是否有一个Linux可用的示例文件系统不符合此规则?

lkaoscv7

lkaoscv71#

  1. /proc/是一个明显的例子:
$ echo hello > /proc/564769/comm
$ cat /proc/564769/comm 
hello

$

(it添加了一个额外的换行符)

  1. NFS:如果客户端调用write()而不是fsync(),并且服务器崩溃并重新启动,则来自客户端的下一个read()将返回旧数据。
    请注意,尽管POSIX和Linux手册页都没有限定它们的声明,但它们都假设应用程序(在本例中是客户端)在写入和读取之间不会崩溃,但对存储介质(在本例中是服务器端)只字未提。
  2. FUSE:FUSE支持回写缓存模式,因此使用它的任何文件系统都容易受到与上面NFS服务器崩溃相同的问题的影响,其中FUSE守护进程可能会崩溃。
    此外,任何人都可以像procfs一样编写一个只有非POSIX语义的FUSE文件系统。

相关问题