perlで読み書き両用ファイルオープンするには?
[上に]
[前に]
[次に]
織田信長
1998/04/07(火) 14:17:27
以前はファイル・ロックにとほほさん式のディレクトリ作成方式を
使っていましたが、なんらかの原因でロック・ディレクトリが残っ
てしまうことが多く、flockを使う方法に変更しました。
具体的には、
open(LOG, "file");
flock(LOG, 1);
@log = <LOG>;
flock(LOG, 8);
close(LOG);
@log への操作
open(LOG, ">file");
flock(LOG, 2);
print LOG @log;
flock(LOG, 8);
close(LOG)
ってな感じです。
でも、@logへの操作中に他プロセスがfileをアクセスできてしまいま
すよね?だから、
open(LOG, "file");
flock(LOG, 2);
@log = <LOG>;
@log への操作
print LOG @log;
flock(LOG, 8);
close(LOG);
ってな感じにしたいのですが、読み書き両用openがうまく行きません。
"+<file" や "+>file"、"+>>file" など、いろいろ書式があるのですが、
どれもこれも 「@logが取り出せて、print LOG が完全上書きになる」
という条件を満たしてくれません。
ご指南のほどおねがいいたします。
B-Cus
1998/04/07(火) 23:47:59
試してませんけど、別のファイルをロックファイルとして
扱って、そのファイルをflockしている間に目的ファイルを
操作するというのはどうですか?
あと、これも試してませんが、seekを使うとか。これは無理っぽいかな。
とほほ
1998/04/07(火) 23:50:29
以下のコードでできるようです。
open(LOG, "+>file");
flock(LOG, 2);
@log = <LOG>;
seek(LOG, 0, 0);
print LOG "HEHE";
truncate(LOG, tell());
flock(LOG, 8);
close(LOG);
ただし、truncate()はサポートしていないシステムもあるので注意。
織田信長
1998/04/08(水) 19:23:55
[[解決]]
>試してませんけど、別のファイルをロックファイルとして
>扱って、そのファイルをflockしている間に目的ファイルを
>操作するというのはどうですか?
おぉ! これは気づかなかった!
早速試してみたところ、どうやらOKのようです。
ありがとうございました。
とほほさんもありがとうございました。
[上に]
[前に]
[次に]