0

我目前正在研究 Bash 中的锁。在我正在使用的脚本中,我有一个文件可以由相同或其他脚本的多次调用同时使用。为了同步对文件的访问,我正在使用锁定文件:

(
   flock -x -w 10 200
   # do stuff with the file $DATAFILE
) 200>$LOCKFILE

这取自我在网上找到的一些例子。但是我想知道是否$LOCKFILE真的需要额外的,或者我是否可以$DATAFILE直接锁定访问:

(
   flock -x -w 10 200
   # do stuff with the file $DATAFILE
) 200>>$DATAFILE

这会起作用吗,或者使用我尝试同步访问的文件作为锁定文件是否有问题?

4

1 回答 1

1

您可以锁定现有的文件描述符而不是创建新的描述符,并且该描述符可以与您用于数据文件的描述符相同:

exec 200<>$DATAFILE
flock -n 200 || { echo "Already locked"; exit 1; }
# do your stuff with descriptor 200
flock -u 200
# optionally, close the descriptor
exec 200>&-

这也适用于只读描述符:

exec 200<$DATAFILE
于 2013-05-13T15:57:09.090 回答