LEASEロック


Rev.1を表示中。最新版はこちら

LEASEロックは、設定された共有/排他ロックを貸し出します。貸し出し対象のファイルに、別プロセスが参照し競合が発生した場合、貸し出しているプロセスにシグナルが送られ、45秒後(デフォルト秒)にそのロックが解除されます。以下はその検証を行うサンプルです。このシグナルでリースしているプロセスは、ロックが解除されてもいい旨の処理をする事になります。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>

// コンパイルで宣言されていないと怒られた
# define F_SETLEASE      1024

void sigio(int sig)
{
       printf("someone access\n");
}

int main(int argc, char *argv[])
{
       int     fd;
       struct sigaction sa = { .sa_handler = sigio };
       sigaction(SIGIO, &sa, NULL);

       fd = open("/tmp/test", O_RDWR);
       fcntl(fd, F_SETLEASE, F_WRLCK);
       while (1) {
               sleep(1);
       }
       return 0;
}

実行結果

[kitamura@localhost test]$ echo "LEASE lock" > /tmp/test
[kitamura@localhost test]$ ./lease &
[1] 4751
[kitamura@localhost test]$ date ; cat /tmp/test  ; date
2012年 10月 24日 水曜日 11:22:35 JST
someone access
LEASE lock
2012年 10月 24日 水曜日 11:23:20 JST
[kitamura@localhost test]$
[kitamura@localhost test]$ date ; cat /tmp/test  ; date
2012年 10月 24日 水曜日 11:23:33 JST
LEASE lock
2012年 10月 24日 水曜日 11:23:34 JST
[kitamura@localhost test]$
cat /tmp/testは45秒後に/tmp/testに参照している。この時、リースしているプロセスにSIGIOが送られ、sigio()が動作している。なお次の/tmp/testの参照ではウエイトしていない。リースは解除されている事になる。

最終更新 2012/10/24 20:09:10 - north
(2012/10/24 20:09:10 作成)


検索

アクセス数
3575101
最近のコメント
コアダンプファイル - sakaia
list_head構造体 - yocto_no_yomikata
勧告ロックと強制ロック - wataash
LKMからのファイル出力 - 重松 宏昌
kprobe - ななし
ksetの実装 - スーパーコピー
カーネルスレッドとは - ノース
カーネルスレッドとは - nbyst
asmlinkageってなに? - ノース
asmlinkageってなに? - よろしく
Adsense
広告情報が設定されていません。