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");
はいかが?

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