- - PR -
排他制御関数flockについて
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-07-18 15:14
perlのflock関数について
以下3点についてどなたかご存知でありましたら教えて頂けないでしょうか。 @perlのVerよって使用有無があるのでしょうか? 現状の動きとして ・Ver4.0では、flock()が未実装であるというエラーが出る。 ・Ver5.8では、エラーは発生しない。 ※OSはUNIX Aもし、Ver間の違いには関係なくflock関数が使用可能である場合、 Verの違いによって使用方法は異なるのでしょうか? 例えば、Ver4.0では、 use Fcntl;の1文が必要であるとか。。。 Bもし、Ver4.0でuse Fcntl;の1文が必要である場合、 perlのインストールの方法等によって異なるのでしょうか? |
|
投稿日時: 2006-07-18 17:19
perl 4.xでもflockは使えますが、flock関数の使用可否はOS依存なので、
OSによってはPerlのVerが何であれ使えません。 では5.xでエラーが出ない理由はと申しますと、5.xはflock()が使用できない場合、 lockf()を使用する為、ソースから追うとflockを使用しているように見えても、 実際はflockは使用出来ずにlockfが使用されています。 |
|
投稿日時: 2006-07-18 17:50
SHR様
早々の返信ありがとう御座います。 ちなみにもう一つ質問させて頂きます。 >flock関数の使用可否はOS依存なので、 >OSによってはPerlのVerが何であれ使えません。 →OSによってとはUNIX、WINDOWSの違いでしょうか? それともUNIXであっても使用できる場合と出来ない場合 があると考えて良いのでしょうか? お手数ですが、宜しくお願いいたします。 |
|
投稿日時: 2006-07-18 19:30
言葉足らずですみません。
→OSによってとはUNIX、WINDOWSの違いでしょうか? それともUNIXであっても使用できる場合と出来ない場合 があると考えて良いのでしょうか? 後者になります。 具体的なOSは忘れてしまいましたが、(何しろ、昔の仕事の事なので) UNIX間で移植する際に、本事象でハマった記憶が…。 |
|
投稿日時: 2006-07-18 19:58
SHR様
度々の返信有難う御座います。 参考にさせて頂きます。 |
|
投稿日時: 2006-07-18 22:38
flockはBSD系のAPIです。
lockfは System V 系のAPIで、fcntlの簡易インタフェースです。 不幸にも、POSIXで標準とされたのがfcntlによるロック機構であったため、 Unixによってはflockを持っていないものがあります。 |
|
投稿日時: 2006-07-19 09:35
ぽんす様
返信有難う御座います。 1点ご教授お願い致します。 >Unixによってはflockを持っていないものがあります。 もしperlで排他制御を行う場合、 BSD系のUNIXの場合、flock System V 系のUNIXの場合、lockf が使用できるという認識で合っていますでしょうか。 |
|
投稿日時: 2006-07-19 22:14
そのはずです。
加えて、(よほど大昔のものを持ってこない限り)BSD系Unixでも lockfが利用できるはずです。 それから、Linuxでもflock、lockfともに利用できるはずです。 |