- PR -

排他制御関数flockについて

投稿者投稿内容
ueq
会議室デビュー日: 2006/07/18
投稿数: 19
投稿日時: 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のインストールの方法等によって異なるのでしょうか?
SHR
ベテラン
会議室デビュー日: 2006/06/15
投稿数: 99
投稿日時: 2006-07-18 17:19
perl 4.xでもflockは使えますが、flock関数の使用可否はOS依存なので、
OSによってはPerlのVerが何であれ使えません。
では5.xでエラーが出ない理由はと申しますと、5.xはflock()が使用できない場合、
lockf()を使用する為、ソースから追うとflockを使用しているように見えても、
実際はflockは使用出来ずにlockfが使用されています。
ueq
会議室デビュー日: 2006/07/18
投稿数: 19
投稿日時: 2006-07-18 17:50
SHR様

 早々の返信ありがとう御座います。
 ちなみにもう一つ質問させて頂きます。

 >flock関数の使用可否はOS依存なので、
 >OSによってはPerlのVerが何であれ使えません。
 →OSによってとはUNIX、WINDOWSの違いでしょうか?
  それともUNIXであっても使用できる場合と出来ない場合
  があると考えて良いのでしょうか?
  お手数ですが、宜しくお願いいたします。

 
SHR
ベテラン
会議室デビュー日: 2006/06/15
投稿数: 99
投稿日時: 2006-07-18 19:30
言葉足らずですみません。

 →OSによってとはUNIX、WINDOWSの違いでしょうか?
  それともUNIXであっても使用できる場合と出来ない場合
  があると考えて良いのでしょうか?

後者になります。
具体的なOSは忘れてしまいましたが、(何しろ、昔の仕事の事なので)
UNIX間で移植する際に、本事象でハマった記憶が…。
ueq
会議室デビュー日: 2006/07/18
投稿数: 19
投稿日時: 2006-07-18 19:58
SHR様

 度々の返信有難う御座います。
 参考にさせて頂きます。
 
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2006-07-18 22:38
flockはBSD系のAPIです。
lockfは System V 系のAPIで、fcntlの簡易インタフェースです。

不幸にも、POSIXで標準とされたのがfcntlによるロック機構であったため、
Unixによってはflockを持っていないものがあります。
ueq
会議室デビュー日: 2006/07/18
投稿数: 19
投稿日時: 2006-07-19 09:35
ぽんす様

 返信有難う御座います。
 1点ご教授お願い致します。

 >Unixによってはflockを持っていないものがあります。
 もしperlで排他制御を行う場合、
 BSD系のUNIXの場合、flock
 System V 系のUNIXの場合、lockf
 が使用できるという認識で合っていますでしょうか。


ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2006-07-19 22:14
そのはずです。
加えて、(よほど大昔のものを持ってこない限り)BSD系Unixでも
lockfが利用できるはずです。
それから、Linuxでもflock、lockfともに利用できるはずです。

スキルアップ/キャリアアップ(JOB@IT)