2013-05-13 37 views
0

我目前正在查看Bash中的鎖。在我正在使用的腳本中,我有一個文件可以被多個相同或其他腳本的調用併發使用。爲了將訪問文件同步,我用的是鎖文件:當我在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

您可以鎖定現有的文件描述符,而不是創建一個新的,並且描述符可以是你使用你的數據文件的同一個:

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