Linux write() man page说道:
POSIX要求一个read(2)可以被证明发生在一个write()返回之后,它将返回新的数据。请注意,并非所有文件系统都符合POSIX。
我想它指的是POSIX write() page,它说:
在对常规文件的write()成功返回后:
- 任何成功的read()从文件中被该写操作修改的每个字节位置返回write()为该位置指定的数据,直到这些字节位置再次被修改。
- 任何后续成功写入()文件中相同字节位置的操作将覆盖该文件数据。
是否有一个Linux可用的示例文件系统不符合此规则?
1条答案
按热度按时间lkaoscv71#
/proc/
是一个明显的例子:(it添加了一个额外的换行符)
write()
而不是fsync()
,并且服务器崩溃并重新启动,则来自客户端的下一个read()
将返回旧数据。请注意,尽管POSIX和Linux手册页都没有限定它们的声明,但它们都假设应用程序(在本例中是客户端)在写入和读取之间不会崩溃,但对存储介质(在本例中是服务器端)只字未提。
此外,任何人都可以像procfs一样编写一个只有非POSIX语义的FUSE文件系统。