如何确保进程只在整个文件可用时才读取文件?

时间:2014-05-06 10:50:34

标签: file unix synchronization cp mv

我有以下要求。

一个进程(进程-1)从DB读取,获取文件并放置检索到的文件,比如位置/进程1 /数据;并最终将文件放在/ application / shared_data

第二个进程(Process-2)将检查共享目录/ application / shared_data中的数据。

这两个过程连续运行,彼此独立。

当Process-1放置一个文件时,将/ process1 / data中的1.zip称为/ application / shared_data;很可能同时process-2尝试读取那个时刻本身的文件;那么我们怎样才能防止这种情况发生呢。

这是process-2应该读取给定文件,仅当process-1将文件完全放在共享目录中时。

任何帮助表示感谢。

此致 VIPIN

1 个答案:

答案 0 :(得分:0)

要么两个进程相互发送消息,要么首先将文件放在临时名称(在目标目录中),然后将其移动到其最终位置。 POSIX保证移动文件是一个原子操作。

E.g。

temp=$(mktemp $(dirname $target).XXXXXX)
cp "$source" "$temp"
mv "$temp" "$target"