假设我有两个进程可以将相同的内容写入同一个文件:
echo "large content" > aFileName
cat aFileName
是否需要同步/锁定?我可以确定在这样的命令之后,文件的内容不会因所有进程中的竞争条件而被肢解吗?
答案 0 :(得分:1)
每个进程都将使用自己的文件指针,因此在正常情况下它应该是安全的。 我能看到的唯一问题是:
A
截断文件A
写入一些数据B
截断文件B
写入的内容少于步骤#2中编写的进程A
B
异常终止而不编写整个文件现在,步骤#2中写入的一些数据会丢失,即使进程A
继续写下其余数据。
您可以写入一个临时文件,该文件在写完所有内容后以原子方式重命名。确保临时文件与输出位于同一文件系统上,并在其名称中使用一些唯一标识符(例如进程ID)。另外,设置陷阱处理程序以删除文件。
此解决方案的缺点是它占用更多存储空间,因为临时文件的多个副本可能同时写入,并且如果进程终止而没有陷阱处理程序能够运行,则某些所述临时文件可能会作为垃圾留下来