flockで、ファイルがない場合は?
[上に]
[前に]
[次に]
デストロイヤー初心者
1999/07/21(水) 19:53:00
ファイルに書きこむときのflockは、オープンの時に > を使わず、
open(FH, "+< Filename");
で、あーだこーだするとよいそうですが、これだと
そのファイルがないとオープンエラーになりますよね。
ファイルがない場合でも、同等な処理をできる方法ありますか?
もちろん、しっかり排他処理ができる方法で。
この3日間、これをずっと考えてましたが、さっぱりわかりません。
助けてください。お願いします。
無印良品
1999/07/21(水) 22:17:47
if文の中でエラー処理すれば?
if(!open(FH, "+< Filename")){
エラー時の処理
}
いろんな所のフリースクリプトでどう処理されているか調べれば
沢山の方法が見つかりますよ。
月
1999/07/21(水) 22:22:29
>そのファイルがないとオープンエラーになりますよね。
やったことないので、これについては、コメントできないけど...
最初にファイルチェックして、なかったらファイルをつくれば..
if (-e $Filename){
真の処理
} else {
open (FH, "< $Filename");
close (FH);
}
#検証してないです。。失礼
deepie
1999/07/23(金) 06:31:32
細かいですが、
>if (-e $Filename) {
'e'より'f'の方が気持ちいいです。
http://www.tohoho-web.com/wwwperl1.htm#FileTest
if (-f $Filename) {
open(FH, "+< $Filename") || die "cannot open\n";
読み書き処理
} else {
open(FH, "> $Filename") || die "cannot open\n";
新しく作って書き込み処理
}
close(FH);
徳明
1999/07/29(木) 12:53:15
細かいですが、
> open(FH, "> $Filename") || die "cannot open\n";
をやってしまうと、if ... else を行っているわずかの隙間に
別のプロセスが作成したファイルを壊してしまう可能性が・・・
open(FH, ">> $Filename");
close(FH);
open(FH, "+< $Filename");
はいかが?
[上に]
[前に]
[次に]