ファイルの存在チェック

[上に] [前に] [次に]
初心者 1999/08/22(日) 19:12:52
perlで、ディレクトリに特定のファイルが存在しているかどうかの
判定をした後、ファイルが存在していないならばファイル名を指定して
空のファイルを作成したいのですがどのようにすれば実現可能で
しょうか?
宜しくお願い致します。

ふじ 1999/08/22(日) 19:45:54
・ファイルの存在チェック→ファイルテスト演算子
if(-e "filename"){
ファイルあり
}else{
ファイルなし
}

・空のファイル作成
open (OUT ,"> filename");
close OUT;

#以下余談なので外してたら読み流してください。

ファイルがあるかどうを調べて空のファイルを作成、というと
ファイルのロック(排他処理)にでも使うおつもりでしょうか?
であれば、この方法は完全なロックには成りません。

ほぼ同時に2つのプロセスが起動したとして、
・プロセス A がファイルの存在チェック → ファイルなしと判定
・(プロセス A が空のファイルを作る前に)プロセス B がファイルの存在チェック
→ ファイルなしと判定
・プロセス A が空のファイルを作成(ロック成功したつもり)
・プロセス B も空のファイルを作成(ロック成功したつもり)
という順序で処理が進むと、排他処理になりません。

そういうときは mkdir を使った方が良いです。
if (mkdir ("lock_dir" , 0777 )){
成功
}else{
失敗
}
こうすると、存在チェックとロックファイル(ディレクトリ)の作成が
同時に行える(既に同じ名前のディレクトリがある場合は、
mkdir が失敗する)ので、普通のファイルを作成する方法よりは
確実なロックになります。
#UNIXでもWindowsでも使えます。

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