在bash中锁定对文件的访问时,是否需要其他锁文件?

时间:2013-05-13 15:48:15

标签: bash concurrency locking

我目前正在看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

这是否有效,或者使用该文件时是否存在一些问题我试图将访问权限同步为锁定文件?

1 个答案:

答案 0 :(得分: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