Perl の flock は PHP の flock をブロックするか?

Posted by
ぴろり
Posted at
2006/04/15 01:51
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
開発メモ カテゴリ

 またはその逆のケース。それぞれ Perl と PHP で書かれたプログラムがあって、その両者が同じファイルに読み書きする処理を考えます。ここで Perl の flock 命令でファイルを排他ロックをした場合、PHP から同じファイルへの読書きは PHP の flock でブロックされるのか?という疑問。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

 以下のようなコードを で書いてしてみました。 論より証拠、まずは動かして試してみます。
 結論から言うと、した環境では期待通りの動作になりました。 flock 命令で排他ロックしたファイルは、 ロックが開放されるまで flock 命令でブロックされます。 また逆のケースでも同じです。
#!/usr/bin/perl
use Fcntl ':flock';

$filename = './test.txt';
$ret = open (FILE, '+>'. $filename);
if ($ret) {
	if (flock (FILE, LOCK_EX)) {
		sleep (5);
		seek (FILE, 0,0);
		print FILE "Written by Perl";
	}
	close (FILE);
}
print "Content-type: text/plain

done.";
<?php
$filename = './test.txt';
$fp = fopen ($filename, 'w+');
if ($fp) {
	if (flock ($fp, LOCK_EX)) {
		sleep (5);
		fseek ($fp, 0,0);
		fwrite ($fp, "Written by PHP");
	}
	fclose ($fp);
}
?>done.

 sleep 命令でflock によるロック状態を暫く保持できるようにしてあります。それぞれのプログラムを少し時間差を付けてから呼び出し、test.txt の内容をチェックします。に使用した環境は以下の通りです。

 加えて以下のも参考に。

 最終的にはどちらも同じシステムコールに行き着くわけですから、表面的な言語の違いというのは問題では無いということですね。そして言語は違えど正しくロックを行わないと効果はありませんよ、と。

 お付き合いくださったマイミク三矢田さん、TOMMY山さん、ありがとうございました

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  



関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。