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