Linux write() 手册页 说:
POSIX 要求可以证明 read(2) 发生在 write() 返回后将返回新数据。请注意,并非所有 文件系统符合 POSIX 标准。我认为它指的是
POSIX write() 页面,上面写着:
对常规文件的 write() 成功返回后:Linux 是否有一个不符合此规则的示例文件系统?
- 从该写入修改的文件中的每个字节位置进行的任何成功的 read() 都应返回该位置的 write() 指定的数据,直到再次修改此类字节位置。
- 对文件中相同字节位置的任何后续成功 write() 都将覆盖该文件数据。
/proc/
是显而易见的:
$ echo hello > /proc/564769/comm
$ cat /proc/564769/comm
hello
$
(添加了额外的换行符)
write()
但不调用
fsync()
,并且服务器崩溃并重新启动,则来自客户端的下一个
read()
将返回旧数据。请注意,虽然 POSIX 和 Linux 手册页都没有限定其声明,但它们都假设应用程序(在本例中为客户端)不会在写入和读取之间崩溃,但对存储介质(服务器)只字未提。侧面,在这种情况下)。
此外,任何人都可以编写一个仅具有非 POSIX 语义的 FUSE 文件系统,就像 procfs 一样。