• ベストアンサー

Windows2000serverとWindowsXPでのFlock関数の使い方について

教えてください。 PerlでCGIのファイルロックをするのに、Flock関数というのがあります。 多くの書籍を読むとFlock関数はUNIX系のサーバでなければ使えないと記述されています。 会社のサーバは「Windows2000server」を使用していますが、Flock関数は使えないのでしょうか? ちなみに自宅では「WindowsXP Pro」を使用して実験していますが、XPでもやはり、Flock関数は使えないのでしょうか? どなたか、ご指導のほど、宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

Windows9x系はダメみたいですがNT系は大丈夫な様ですね。 こちらの3.のところにもそう書かれています。 http://www.salut.ne.jp/bf/wmh/seminar/c008/index.php3 こちらにも同様のことが書かれています。 http://www.google.com/search?num=50&lr=lang_ja&q=Windows perl%20flock

butaro2000
質問者

お礼

早速の回答、どうもありがとうございました。 Perlでの質問を再びすると思いますが、その時もまた、このような 的確なご指導の程、よろしくお願い致します。

関連するQ&A

  • flock関数についてですが、

    自分が探した限りでは、どの参考の本にも、あるいはperlについて論述したサイトにもこのことに関する記述がなかったので質問させていただきます。  flock関数でのファイルのロックなのですが、例えば、Aというperlで組んだcgiプログラムがファイルロックしている最中に、Bという同じディレクトリの中にある別のcgiプログラムが、同じファイルを開けようとしても、ファイルはロックされているものなのでしょうか?それとも、ロックされていない無防備な状態でいると言う事でしょうか? いろいろ調べて回りましたが、この事についての論述は見当たりませんでした。この事について知っている、あるいは解説されたサイトをご存知だという方、よろしければお知恵を貸してくださいませ。よろしくお願いします。

    • ベストアンサー
    • Perl
  • flockについて

    http://www.freespace.jp/phpstudy.php4 のサイト様を拝見したり、フリーで配布されているスクリプトを見ると、書き込むファイルに対して、 $fp = fopen('bbs.log', 'r+'); flock($fp, LOCK_EX); … とやっていると思うのですが、perl記述のcgiで掲示板を作成したときは、書き込むファイルとは別にロック用のファイルを用意し、(perl記述です) open(LOCK,"+<$lockfile"); flock(LOCK,2); open(IN,"$logfile"); .... close(IN,"$logfile"); open(OUT,"$logfile"); .... close(OUT,">$logfile"); としていました。(書き込むファイルが2つあったのでこのような方法をとってました) そこでphpでも同じ方法は使えるのでしょうか? $fp = fopen('bbs.log', 'r+'); flock($fp, LOCK_EX); … の方法を使おうと思っていたのですが、最初にログファイルを読み込むとき、 file("bbs.log"); という風にしているので、flockに記述すべきファイルハンドルが見当たりません。仮に取得できたとしても、file();の仕様からして内部にcloseが入ってそうなので、flockできたとしてもcloseで無効になってしまわないかが心配です。なのでこの場合はやはり別にログファイルを用意しないとできないということでしょうか。

    • ベストアンサー
    • PHP
  • Windowsサーバーでflockはできるのでしょうか?

    Windowsサーバーでflockはできるのでしょうか? 言語はPerlもしくはPHPで考えております。 確かWindowsサーバーはflockは利用できなかったと記憶しております。 しかしファイル同時書き込みの排他制御は必ず実装しなければなりません。 代替方法としてファイルをリネームして・・というやり方もあるようですが それしか方法はないのでしょうか? データベースは使用する予定はありません。

    • ベストアンサー
    • Perl
  • カウンターなどのLock機能について

    まだまだPerlをはじめたばかりで、カウンターなんて読み込んで+1してるだけです…(お恥ずかしい…) まだ自分でhttpdのサーバソフトを使って実験的におぉ!とかいって楽しんでいる程度ですが、初心者の参考書を読んでみるとflockでロック機能をもたせていました。 今学校でもunixの勉強をしており、本当に少しですが、unixのコマンドなどについても分かってきました。以前はぜんぜんでしたが…。 そこで、flockなどはunixサーバなどでじゃないと活用できないんですよね?このご時世でunixサーバでないというのも珍しいとは思うのですが、unixというものに依存するのがなんとなくいやです。(わがままですいません。) 分かりやすく、かつ高機能なロック(確実に壊れない【ないのでしょうが…】)はないのでしょうか?もし、よかったら、それのソースを教えていただきたいのですが、まだまだ分からないことだらけですが、いじでも勉強してやるきはあります! どうかよろしくおねがいします。

    • ベストアンサー
    • CGI
  • flock関数を使わない類似した掲示板

    こんにちは。 現在サイトを立ち上げて掲示板を設置しようと考えています。 http://park8.wakwak.com/~da101/other/heppokobbs/bbs.html 色々探した結果上記のスクリプトが気に入ったのですが、 此方が利用しているサーバでは flock関数が使えないとの事で利用出来ませんでした。 上記の物を改造出来れば一番良いのですが、 残念ながら自分にはperlの知識は殆どありません。 そこで無茶なお願いですが、 上記の様な形式のflock関数を使わない掲示板を 教えて頂けませんでしょうか。 宜しくお願いします。

    • ベストアンサー
    • CGI
  • flock関数での排他制御

    外部ファイルを更新する処理を作成しています。 ファイル更新中にファイルロック(flock関数)をかけて、 ロック中という事ではじかれた場合はエラーを出力するという仕組みを考えています。 下記にように記述しているのですが、 ロック中で書きこめなかった場合 エラーを出力する事はできたのですが、 ファイルが全て消えてしまいます… この場合はファイルを元のままに保持していたいのですが… あつかましいお願いかとは思いますが、 以下のソースで訂正すべき箇所は何処でしょうか。 =============================    $fp = fopen ($filename, 'w');  // ファイルオープン    if (flock($fp, LOCK_SH)) {   // 排他的ロックを行う    fputs($fp, 'ABCD');    // 書込む    flock($fp, LOCK_UN);    // ロックを解放する    fclose ($fp);       // クローズ        $flg = 1;   // 書込フラグ    b

    • ベストアンサー
    • PHP
  • CGIでflockは使えますか? Debian GNU/Linux 3.0

    サーバはDebian GNU/Linux 3.0です。 http://www.kent-web.com/utility/index.html にあるSymlink Checkerを使えば、flockは利用できるそうですが、 http://apps.cside.com/perl/util/ にあるflock検査では、利用できないと表示されます。 サーバにはsuでログインできます。 CGIでflockが使えるかどうかは、どのように判断すればよいのでしょうか?

  • ロック??

    データファイルとかは同時書き込みされると破損するみたいですね。 それを防ぐにはとうすりゃいんだ?と思い書籍(十日でおぼえるPerl講座)をみるとFlock関数を使えばいいとありました。 しかし自分が使っているスクリプトのロック関数は MkdirとSymlinkだけです。 これはどうすればいいんでしょうか?

  • レンタルサーバーのOSの細かい情報を得るCGIプログラム

    レンタルサーバーのOSの細かい情報を得るCGIプログラムってなんの関数なりモジュールなりを呼べば良いのでしょうか? 環境変数とかだと、漠然と「UNIX」とかいう役に立たない情報が返ってくるだけなのですが、細かく知るときには、どうかくもんなんでしょう? C/C++もしくは、Perlでお願いします。

    • ベストアンサー
    • CGI
  • flockのタイミング

    掲示板のスクリプトを作っています。 ログは1行ごとに1記事分のデータが格納されているので、書き込み処理の場合は、 $lines = file("./log.dat"); としていったん配列にログを読み込み、 array_unshift($lines, $new_data); 等して、新しい記事のデータを配列の先頭に追加し、 $fp = fopen("./log.dat", "wb"); foreach ($lines as $line) { fputs($fp, $_); } fclose($fp); として、最終的にログに書き込みます。 Perlを扱っているときは(複数更新すべきログファイルがあったので)、別途ロックファイルを作ってそれに対してflockをかけるという方法を行っていましたが、今回はログファイルが1つであるのでそのログファイル自体にflockをかけようと思っています。 しかし、fileで最初にopenしているため、ファイルポインタが取得できず、flockをかけるタイミングは、本当の書き込み作業の部分(fopen)からかけるしかなさそうなのですが、これは危険ではないでしょうか? それと、マニュアルに、 注意: flock()は、ファイルポインタを必要とするため、 (fopen()へ引数"w"または"w+"を指定して)書き込 みモードでオープンすることにより丸めるファイルにアクセス保護する 特別なロックファイルを使用する必要があるかもしれません。 とかいてありますが、この意味がいまいちわからず、困惑しています。

    • ベストアンサー
    • PHP