在UNIX中文件追加原子?

前端之家收集整理的这篇文章主要介绍了在UNIX中文件追加原子?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一般来说,当我们从多个进程附加到UNIX中的文件时,我们可以认为是什么?是否可能丢失数据(一个进程覆盖其他人的更改)?数据是否有可能被损坏? (例如,每个进程都在每个append附加一行到一个日志文件,是否有可能两行被篡改?)如果append在上述意义上不是原子的,那么什么是确保互斥的最好的方法
在“PIPE_BUF”大小下的写应该是原子的。这应该是至少512字节,虽然它可以很容易更大(linux似乎将其设置为4096)。

这假设你说的是所有完全符合POSIX的组件。例如,在NFS上不是这样。

但是,假设您写入以’O_APPEND’模式打开的日志文件,并将您的行(包括换行符)保持在“PIPE_BUF”字节以下,您应该能够有多个写入日志文件,而不会出现任何损坏问题。任何中断将在写入之前或之后到达,而不是在中间。如果你想要文件完整性在重新启动后生存,你也需要在每次写入后调用fsync(2),但这对性能来说是可怕的。

澄清:阅读评论Oz Solomon’s answer.我不确定O_APPEND是否应该有PIPE_BUF大小原子性。它完全有可能是Linux实现的write(),或者可能是由于底层文件系统的块大小。

猜你在找的Bash相关文章