【发布时间】:2011-07-09 05:25:15
【问题描述】:
我想知道对单个文件的写入是否以原子方式完成,这样对同一个文件的 write("bla bla") 和随后的 write("herp derp") 不会导致交错,例如“bla herp bla derp”。假设这些写入发生在不同的进程或线程中,那么什么决定了哪些先完成?
另外,read() 是否总是返回反映文件处于所有先前写入完全完成状态的数据(无论数据是否已实际写入磁盘)?例如,在 write("herp derp") 之后,所有后续读取是否始终反映写入文件的完整数据,或者后续读取有时仅反映“herp”而不反映“derp”(或有时不反映任何数据完全)?如果读写发生在不同的进程/线程中怎么办?
我对并发文件访问策略不感兴趣。我只想知道读写到底是做什么的。
【问题讨论】:
-
你的问题很有趣,正是我要问的。大声笑...
-
您可能对 Linux 内核 thread 感兴趣,标题为 Update of file offset on write() etc. is non-atomic with I/O 这导致了这个提交– git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/…