open(F,"<file.txt");の時もflock(F,2);すべき?

[上に] [前に] [次に]
KAN 1999/07/22(木) 10:39:57
 極端な例ですが、巨大なサイズのfile.txtを$newへコピーする時、

open(F,"<file.txt");
open(G,">$new");
while(<F>){
   print G $_;
}

のような時に、flock(F,2)はすべきでしょうか?
別プロセスによるファイルポインタの移動を阻止するために、排他ロック
をかけたほうが良いと思えるのですが、本で読んだサンプルなどでは、読
み込み時にflockを使う例を見ません。
  それとも、私のファイルポインタへの理解が誤っているのでしょうか?

deepie 1999/07/27(火) 05:25:40
open(F, "file.txt");
flock(F, 1);
# 読み込むだけなら操作モードを「2」にする必要はないと思う。
# 「1」は読み込みならできる、「2」は読み書き禁止、という意味だったような気がします。
open(G, "+<$new");
flock(G, 2);
truncate(G, 0);
seek(G, 0, 0);
while (<F>) {
print G $_;
}

deepie 1999/07/27(火) 05:28:46
あ、$newっていうくらいだから新規ファイルの作成ですよね。
open(G, "+<$new");じゃだめですね、すいませんm(__ __)m

deepie 1999/07/27(火) 05:33:57
ごめんなさい、論点がずれてますね(笑)

「flock関数使うべき」でしょう。

[上に] [前に] [次に]