揮発性のメモ2

http://d.hatena.ne.jp/iww/

flockコマンドをflock関数みたいに使う

flock(1)flock(2)みたいに使いたい
Stray Penguin - Linux Memo (BASH)
ここに書いてあるとおりに実施する

関数定義

# ロック (ロックファイル名)
filelock () {
    exec 9>>$1
    flock -x 9
}

# アンロック
fileunlock () {
    exec 9>&-
}

使い方

echo "HEAVEN OR HELL"
filelock /tmp/hoge

echo "LET'S LOCK"
sleep 10

echo "SLASH"
fileunlock



    exec 9>>$1

http://chaichan.web.infoseek.co.jp/src/BSH.htm#B13
本を読む execによるリダイレクトで番号を自動で割り振る
ファイルディスクリプタ 9番 を、引数(/tmp/hoge)への追記としてオープンする
この9番へ何か書けばそれは/tmp/hogeへの追記になるが、今回はファイルディスクリプタ取得のためだけに使用する。
読み込み方向だとファイルが無いときに作らないとダメなので、書き込み方向で。追記なのは一応TRUNCATE処理とかさせないため。

    flock -x 9

ディスクリプタ 9番 を使って排他ロックする。 これ日本語manに書いてないんだよな・・・


flock(1) - Linux man page

Name
flock - Manage locks from shell scripts
Synopsis
flock [-sxon] [-w timeout] lockfile [-c] command...
flock [-sxon] [-w timeout] lockdir [-c] command...
flock [-sxun] [-w timeout] fd

Man page of FLOCK
    exec 9>&-

ファイルディスクリプタを閉じる。ようするにclose()なのでその時点でflock()は効果を失ってくれる。
用が終わってすぐプログラム終了するなら別に呼ばなくてもいい。