たとえばカウンタなどを作ろうと思ったとき、データを保存する
ファイルを2重にアクセスできないようにするために、ロックファ
イルを用意するのが一般的だと思います。
しかし、単にロックファイルを作って、それを
if (-e $lockfile) {~~}
などとやっても、けっこう頻繁に2重アクセスされてしまいます。
実際、以前、1000アクセス/日あるページを運営していたとき、上の
方法では3日に1回は壊れました。
上の方法は、理論上はありえないはずなのに、なぜおこるのでしょうか?
また、ロックファイルではなくロックディレクトリを作って、
unless (mkdir ("./lock", 0777)) {~~}
と行うことによっても、同様の判定が可能かと思いますが、
こちらの方法でもやはり2重アクセスが発生してしまうことが
あるのでしょうか? その確立は、ロックファイルと同一レベル
でしょうか? また、発生するならば、ディレクトリシステム上に
同じ名前のディレクトリが2つ存在することになるのでしょうか?
もしわかる方がいらっしゃいましたら、ぜひ教えてください。
No.2ベストアンサー
- 回答日時:
下記のページが、非常に参考になります。
(左記:とほほのWWW入門、右記:大崎博基氏のHP)
なぜ壊れてしまうのか、については左記のHPを、
壊れない方法については両方のHPを参考にしてみてください。
1000Page/day程度のアクセスで壊れることはなくなるでしょう。
参考URL:http://tohoho.wakusei.ne.jp/wwwcgi8.htm , http://www.din.or.jp/~ohzaki/perl.htm#File_Lock
ありがとうございます!
さっそく参照してみたところ、期待していた以上の情報を得ることが
できました。おそらくは何の問題もなくロックできそうな気がします。
こんなとびっきりの情報をいただいておきながらナンですが、
万が一のためにも、今日いっぱいだけ受け付けさせてください。
No.1
- 回答日時:
ファイルのオープン時は、多分
・lockfileの生成
・データファイルのオープン
・lockfileがあるかを判別し、条件分岐
という順番で手続きを取っていると思いますが、ファイルクローズ時はどういう順番で閉じられてますか?
補足お願いします
この回答への補足
全体の流れとしては、
1) ロックファイルについての条件分岐
2) ロックファイルの生成
3) データファイルのオープン
4) データ読み出し&処理
5) データファイルへの書き込み
6) データファイルクローズ
7) ロックファイル消去
の順番で行っています。
ご指摘のように、ロックファイル生成の後で
ロックファイルがあるかどうかを判別するのは、
アルゴリズム的に矛盾があったりしませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PCに保存していた写真を見られ...
-
拡張子をつくる
-
ExcelVBAでリンク先の対象のフ...
-
Excelで外部のファイルの場所を...
-
Outlookで添付ファイルの貼り付...
-
OpenFileDialogを使った後にも...
-
Git bashが開かなくなってしま...
-
スマホでHTMLファイルを開いて...
-
EXCEL VBAのDir関数について
-
URL直接指定禁止の自ムービーフ...
-
C#のFileSystemWatcherでのファ...
-
aspのファイルからAccessを参照...
-
リンク貼り付けの際にファイル...
-
ファイル名とホルダ名の取得
-
VBSでメール送信
-
rsync実行でmkdirエラー
-
linux duコマンドで困っています。
-
メルカリを退会して再登録した...
-
バッチファイルで特定のファイ...
-
コマンドプロンプトでサービス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PCに保存していた写真を見られ...
-
拡張子をつくる
-
Excelで外部のファイルの場所を...
-
同名フォルダを作成し、そのフ...
-
OpenFileDialogを使った後にも...
-
ExcelVBAでリンク先の対象のフ...
-
MkDir パス名が無効です
-
参照元Excelファイルをバックグ...
-
<a href="file:///フォルダ名/...
-
ファイルの作成日時について
-
ExcelのVBProjectがExcelを開く...
-
Excelファイルの特定のシートを...
-
スマホでHTMLファイルを開いて...
-
秀丸のタグジャンプがうまくで...
-
VBSでメール送信
-
EXCEL VBAのDir関数について
-
Outlookで添付ファイルの貼り付...
-
Mac Excel VBAについて
-
「~$ファイル名.doc」というフ...
-
ファイルとフォルダのセキュリ...
おすすめ情報