[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-devel:03716] file lock worked correctly on NFS?



樽石です。


NFS上はファイルロックが正常に機能しない可能性がある。
とxjumpの作者工藤さんからメールを頂きました。
#すくなくともFreeBSD/NetBSDではだめ。

From: Tatsuya Kudoh(CDR/TK) <kudoh@xxxxxxxxxxxxxxxxxxxx>
Subject: test program to lock file
Date: Tue, 02 Jun 1998 15:40:05 +0900
Message-ID: <199806020640.PAA03115@xxxxxxxxxxxxxxxxxxxxxxxxxxx>

kudoh> 工藤です。
kudoh> ファイルロックのテストプログラムを送るので、試して下さい。
kudoh> コマンドライン上で指定したファイルにロックをかけ、リターンキーが
kudoh> 押されるまで待ってからクローズします。
kudoh> 
kudoh> 実行例
kudoh> 
kudoh> [dragon]~> ./a.out test 
kudoh> open 'test'
kudoh> lock 'test'
kudoh> push return to unlock
kudoh>    <ここでリターンを押す>
kudoh> unlock and close 'test'
kudoh> 
kudoh> このプログラムを二つ同時に実行した場合、すでにロックされているファイルを
kudoh> ロックしようとした時点でブロックされるので、open 'test' まで表示して
kudoh> 止まります。ただし、次の場合はうまく行きません(FreeBSD/NetBSD)
kudoh> 
kudoh> 1) ホストAとホストBで、ロックしようとするファイル(この場合 test )を
kudoh>    NFSで共有している。
kudoh> 
kudoh> 2) このプログラムをホストAとホストBで同時に実行する。
kudoh> 
kudoh> この場合、ホストAのプログラムがロックをかけているにも関わらず、
kudoh> ホストBでもロックをかけてしまいます。
kudoh> 
kudoh> 手元にLinux環境が無いのでどうなるか分かりません。試して見て下さい。
kudoh> flockシステムコールはlockfになるかも知れません。
kudoh> 
kudoh> ーーーーーーーーーーーーここからーーーーーーーーーーーー
kudoh> #include<stdio.h>
kudoh> #include<sys/file.h>
kudoh> 
kudoh> 
kudoh> int main( int argc, char **argv )
kudoh> {
kudoh>   int fd;
kudoh> 
kudoh>   if( argc < 2 ){
kudoh>     fprintf(stderr,"usage : %s filename\n",argv[0] );
kudoh>     exit(1);
kudoh>   }
kudoh> 
kudoh>   if( (fd = open( argv[1],O_RDWR )) < 0 ){
kudoh>     perror(argv[1]);
kudoh>     exit(1);
kudoh>   }
kudoh>   printf("open '%s'\n",argv[1] ); 
kudoh> 
kudoh>   flock( fd,LOCK_EX );
kudoh>   printf("lock '%s'\n",argv[1] );
kudoh>   printf("push return to unlock\n" );
kudoh> 
kudoh>   getchar();
kudoh> 
kudoh>   close( fd );
kudoh> 
kudoh>   printf("unlock and close '%s'\n",argv[1]);
kudoh>   return 0;
kudoh> }
kudoh> 
kudoh> ーーーーーーーーーーーここまでーーーーーーーーーーーーーーー

とのことです。今手元に環境がないので試せません。
どなたか確認、もしくは事情に詳しい方教えてください。

と思ったらまたメールが届きました。

From: Tatsuya Kudoh(CDR/TK) <kudoh@xxxxxxxxxxxxxxxxxxxx>
Subject: Re test program to lock file
Date: Tue, 02 Jun 1998 16:14:41 +0900
Message-ID: <199806020714.QAA03424@xxxxxxxxxxxxxxxxxxxxxxxxxxx>

kudoh> 工藤です。
kudoh> ファイルロックの件ですが、flockシステムコールではなく、lockf関数を
kudoh> 使うとよい様です。
kudoh> というわけで、
kudoh> 
kudoh> flock( fd,LOCK_EX );
kudoh> 
kudoh> を
kudoh> 
kudoh> lockf( fd,F_LOCK,1 );
kudoh> 
kudoh> に書き換えて試して下さい。
kudoh> 必要なヘッダは恐らく unistd.h です。
kudoh> 
kudoh> これでうまく行くようなら、xjumpのソースを同様に書き換えて下さい。
kudoh> 
kudoh> NetBSD とLinux でファイル共有している環境で試したらうまく動きませんでしたが、
kudoh> NEWS 4.xでは動きました。FreeBSDでは試していません。
kudoh> OpenBSDにはそもそもlockfがありませんでした。(fcntlを使えば良いのか?)

やはり環境がないのでうちではダメです。
どなたかよろしくです。

----
University of Electro Comunications
    Department of Computer Science, Computer Science Course, Junior

Masato Taruishi (taruis-m@xxxxxxxxxxxxx)