- ベストアンサー
Perl-CGI で排他制御はどうすればよいのか?
このカテゴリでは始めて質問します。 今 Perl-CGI でアクセス・カウンタを自作しようとしています。 今まではレンタルしたカウンタを使っていましたが複数のページで 個別に使えないため自作することを決めました。 そこで質問です。 アクセス・カウンタで重要な排他制御はどのように行いますか? 今ネット検索で見つけたものがディレクトリを作成しておく方法です。 これ以外に何か上手いやり方はありますか? Perl は入門したばかりです。 どうぞよろしくお願いいたします。 排他制御で気をつけるべき点がありましたら一緒に教えて下さい。 それでは回答をお待ちしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> (1)レンタル・サーバーで flock 命令が使えるかどうかは > どのように調べればよいのでしょうか? レンタル・サーバーのドキュメント、マニュアル、FAQなどで調べてください。 たいていはflockの使用の可否がどこかに書かれています。 perl上から確認したい場合は、 flockを使ったperlプログラムを実際に動作させれば サポートされていない環境ではプログラムが異常終了する(らしい)ので それで分かると思います。 異常終了されては困る場合は、 致命的エラーをトラップできるevalを使います。 CGI Saloon - ロックについて http://www1.plala.or.jp/bagi/labo/lock.html 同時書き込みの防止 - Making of TinyBoard http://www.aikis.or.jp/~s-suzuki/cgilabo/tinyboard/kouza/002.html > (2)flock 命令が使えたとして Perl-CGI を書くと閲覧者の > 環境(OS,ブラウザ)には関係なく正しく排他制御は出来ますか? Perl/CGIはサーバー上で動作するものです。 なのでクライアントサイドの環境は無関係です。
その他の回答 (2)
- Werner
- ベストアンサー率53% (395/735)
> Perl-CGI の排他制御はディレクトリで行うのが一般なのでしょうか? 「perl 排他制御」で検索したなら既に[1]は読んでいると思いますが、 そこに書かれているように方法は色々あります。 どの方法を選択するかですが、 私は、flockが使える環境であれば素直にflockを使って良いと思います。 flockはまさに排他制御のための関数で、使えるのならこれが一番簡単で確実なはずです。 しかし、flockが使えない環境でも使える汎用性を求めるならmkdirを使うことになるでしょう。 mkdirを使ってできるだけ信頼性の高いファイルロックを実現するためには [3]や[4]が役に立つと思います。 排他制御で気をつけるべき点については、[2]を読むことをお勧めします。 [1] Perlの排他制御 (flock,open,symlink,mkdir,rename) http://homepage1.nifty.com/glass/tom_neko/web/web_04.html [2] CGIやDBのロックと同時実行制御: CANO-Lab http://jn.swee.to/cano/lock/index.shtml [3] ファイルロックについて/排他処理/CGI/Perl http://tech.bayashi.net/pdmemo/filelock.html [4] Perlメモ#排他制御(ファイルロック)をする - 大崎 博基(OHZAKI Hiroki) http://www.din.or.jp/~ohzaki/perl.htm#File_Lock
お礼
回答有り難うございます。 >そこに書かれているように方法は色々あります。 そうですね。 最初は symlink、次に flock で排他制御を行うサイトを発見しました。 その後にディレクトリによる方法などなど。 >私は、flockが使える環境であれば素直にflockを使って良いと思います。 同感。 >flockはまさに排他制御のための関数で、使えるのならこれが一番簡単で確実なはずです。 flock 命令が使えるかどうかは、どのように調べればよいのでしょうか? >mkdirを使ってできるだけ信頼性の高いファイルロックを実現するためには >[3]や[4]が役に立つと思います。 [4]は昨日読みました。ここが詳しいですね。参考になりました。 文字数の関係で補足に続きます。
補足
続き。 (1)レンタル・サーバーで flock 命令が使えるかどうかは どのように調べればよいのでしょうか? (2)flock 命令が使えたとして Perl-CGI を書くと閲覧者の 環境(OS,ブラウザ)には関係なく正しく排他制御は出来ますか? 上記の2点に付きお聞きしたいです。 再回答をお待ちしています。 別の方でも良いのでお願い致します。
http://www.google.co.jp/search?q=perl%20%E6%8E%92%E4%BB%96%E5%88%B6%E5%BE%A1&hl=ja&lr=lang_ja ディレクトリ作成がOS依存を減らす為に最も有用であるらしいからそのままで良いと思う。 そうでないならサーバで利用可能そうである排他制御で一番早そうなのを使ったら良さそうだけど…いつ環境が変わるか判らないしやっぱりディレクトリが良いと思う・・・
お礼
回答有り難うございます。 『perl 排他制御』キーワードで検索すればよかったのですね。 これから読んでみます。 SAYKA さん有り難うございました。 Perl-CGI の排他制御はディレクトリで行うのが一般なのでしょうか? Unix 系は良く分かりませんのでそちらに精通してる方がいましたら 意見をお聞きしたいです。
お礼
再回答有り難うございます。 レンタル・サーバーの FAQ に flock については記述されていないため この後『お問い合わせ』メールで確認してみます。 >Perl/CGIはサーバー上で動作するものです。 >なのでクライアントサイドの環境は無関係です。 やはりクライアント環境には無関係なのですね。 分かりました。 いろいろとアドバイスを有り難うございました。 これで質問を締め切ります。