• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:非常にしょうもない質問で恐縮ですが。。。)

ウインドウズ環境でファイルロックを使ってもエラーが出ない方法とは?

naturalの回答

  • ベストアンサー
  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

{}(ブロック)を使用して内部に文を書く場合基本的にセミコロンを付けますが、ブロック内の最後の文に限ってセミコロンは省略可能です。 今回の例ではブロック内は単文ですから、即ち最後の文となりセミコロンを省略しても良いことになります。

hidebu-
質問者

お礼

今、単純な変数展開をして確かめたところ、おっしゃるとおりちゃんと実行されていました! 既に納品したあとに気付いたのでアセリマシタ。 perlをあまり使ったことがないので、自信がなくしょうもない質問をしてしまいました。 答えてくださってありがとうございます!

関連するQ&A

  • unixでのファイルロックの方法教えてください

     unixでファイルロックを試みているのですが、うまくいきません。open関数で得たファイル指定子にlockfを用いてみたのですがうまくいきません。ロックはされているようなのですが、他からファイルに書き込みができてしまうのです。  flockやO_EXLOCKなどは、使えないのです。誰か、「こうすればいい!」といえる方、教えてください。

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

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

  • サーバに負担をかけずに複数のファイルを開きたいのですが

    複数のファイルを順番に開いていきたいのですが(その際、FLOCKを利用したいのですが)、サーバにかなりの負担がかかってしまうようです。負担がかからない方法などがありましたら、教えていただけると大変助かります。何卒よろしくお願いいたします。 具体的には、以下のように記述しているのですが、(素人の根拠のない思いつきで申し訳ありませんが)例えば、1行目の「for($k=1;$k<=15;$k++){」のあとに、「sleep」を入れると、少しは負担が軽くなるものでしょうか? もしも効果があるならば、何秒ぐらいが適当でしょうか? for($k=1;$k<=15;$k++){ #以下の作業を15回繰り返します $file="$k".".dat"; #ファイル名(1.dat~15.dat)指定 open(FILE, "$file"); #ファイルを開く eval{flock(FILE, 2)}; #ファイルロック $/ = ''; $tmp = <FILE>; #ファイル内データを$tmp入れる $/ = "\n"; close(FILE); #ファイルを閉じる } ちなみに、ファイルからデータを読み出すだけでなく、データを書き込むことも頻繁にあるため、ロックしている時間はできるだけ短くしたいと考えております。 何か良い方法がありましたら、教えていただけるとありがたいです。よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • 【ruby】flockで掛けたロックを参照したい

    複数プロセス間で、一つのファイルに対して読み書きしたいです。 その際、ファイルへの書き込み中は、ファイルの読み込みを抑止したいです。 また、読み込みの処理はファイルのロックを参照するだけで、ファイルへのロックは掛けない様にしたいです。 そこで、以下二つプログラムを作成して、簡単な検証を行いました。 ■プログラム1 キーボードからの入力があるまで、ファイルをロックする。 #!/usr/local/bin/ruby file='./hoge.txt' f=open(file,'r+') ret=f.flock(File::LOCK_EX|File::LOCK_NB) STDOUT.write 'Hit any key' STDIN.gets.chomp ■プログラム2 ファイルがロックされているか状態を取得する。 #!/usr/local/bin/ruby require "fcntl" file='./hoge.txt' f=open(file,'r') arg="" f.fcntl(Fcntl::F_GETLK,arg) l_start,l_len,l_pid,l_type,l_whence = arg.unpack('VVVSS') puts l_len ※プログラム2は、fcntlの使い方がマニュアルを読んでもよく理解できなかったので、 手探りで記述しました。 実行すると、プログラム1はエラー無く動きましたが、プログラム2は以下の様なエラーが 出てしまいます。 fcntl.rb:6:in `fcntl': Invalid argument - ./hoge.txt (Errno::EINVAL) from fcntl.rb:6 環境は、unixレンタルサーバ(FreeBSD)です。 上記方法では、上手くいきませんでした。 flockでファイルにロックが掛っているか否かを、そのファイルにロックを掛けることなく 調べるにはどうしたら良いのでしょうか? ご指導のほど、宜しくお願いいたします。

    • ベストアンサー
    • Ruby
  • 渡された引数の型を判別する

    ブレークポイント用に以下のようなサブルーチンを作ってみました。  sub bp {  if(not defined $_[0]){return};     open(OUT,">>$bpfile") || err('ファイルが開けません。bp');  eval{flock(OUT,2)};     my $num=@_-1;  print OUT $_[0];   for my $i(1..$num) {   print OUT "\t".$_[$i];   }  print OUT "\n";     close(OUT);  } ただ  bp(); と記述すれば何もせず、本当にただのブレークポイントですが、引数に変数を持ってくれば、その位置での変数の値をファイルに記録してくれます。 ただ引数が連想配列だった場合、キーや値が表示される順番が毎回違うので使い勝手に難があります。変数の型をサブルーチン側で判別して、コードを書き分けることは出来ないでしょうか。

    • ベストアンサー
    • Perl
  • ファイルロックの確認

    PHPで掲示板を作っています。バージョンは5? (php.exeファイルのバージョンは5.2.1.1です。) ファイルロックについて、下記2点を教えてください。 同時書き込みによるログファイルの破損を防ぐため、ロック専用ファイルによるロックとアンロックの仕組みを作りました。 正常に稼動しているか、以下の方法でチェックしました。 1.ブラウザを2つ開く 2.両方とも書き込みボタンを押すだけの状態にする 3.両方のブラウザ(フォーム)の「書き込み」ボタンをすばやく続けてクリックする この方法だと、3で2個のボタンをクリックする間のタイムラグがあり、“同時”書き込みは難しいように思います。 他に方法があるのでしょうか? ////////// ロックファイル:lock/lock.php(755) --<?php --$lockfile = '.lock/lock.txt'; --$fp = fopen($lockfile,"w"); --flock($fp,LOCK_EX); --?> アンロックファイル:lock/unlock.php(755) --<?php --fclose($fp); --?> ロック用ファイル:lock.txt(644) ロックディレクトリ:lock(755) 動作ファイル:bbs.php --<?php --require_once './lock/lock.php'; --掲示板の処理 --require_once './lock/unlock.php'; --?> ロックのファイルを別ディレクトリに置くことは可能でしょうか? 可能であれば、パーミッションはどのようにすればいいのでしょうか? 現状、前述の方法でログが破損するかチェックしても異常ありません。 また、ロック関連の記述を削除してチェックしても異常ありませんので、ロックが正常に稼動しているのかどうか確認できない状態です。 PHPは始めたばかりですので、おかしなことを言っている箇所もあるかもしれませんが、宜しくお願いします。

    • ベストアンサー
    • PHP
  • Solaris 2.7 ディスク障害と ok プロンプトの数字

    お世話になっております.Solaris 2.7 マシン(Enterprise 450)が何かと不調なので,対策をご教示いただきたく質問しました. (1) あるファイルにアクセスすると Nov 9 22:16:22 d0 unix: WARNING: /pci@4,2000/scsi@1/sd@1,0 (sd61): Nov 9 22:16:22 d0 Error for Command: read(10) Error Level: Fatal Nov 9 22:16:22 d0 unix: Requested Block: 104709456 Error Block: 104709470 Nov 9 22:16:22 d0 unix: Vendor: HITACHI Serial Number: 30239801 Nov 9 22:16:22 d0 unix: Sense Key: Media Error Nov 9 22:16:22 d0 unix: ASC: 0x11 (<vendor unique code 0x11>), ASCQ: 0x2, FRU: 0x0 のようなエラーが出ます.HD 障害と思われますが,fsck をかけてもまったくエラーが検出されません.ディスクを取り替えるべきでしょうか? (2) このディスク障害との関係はわかりませんが,何の前触れもなくサーバが落ちました.ログをみても特に正規の shutdown を経た形跡はまったくなく,異状の形跡もまったく残っていません. ここで気になったのは,落ちたサーバにシリアルコンソールからログインすると {3} ok となっていたことです.通常は {0} ok になっています.この数字は CPU 3 を表すものらしく,確かにこのサーバには CPU1 と CPU3 があるのですが,{0} が {3} になっていたということは何を意味しているのでしょうか? (障害と関係があるのでしょうか) ちなみに boot したら fsck でいくつか引っかかりましたが,その後は正常に起動,動作しています. よろしくお願いいたします.

  • Perlの多重起動を禁止したい

    main_01.plというプログラムがあります。 これは10分毎にバッチファイルから起動の命令が下ります。ただしプログラムの処理によっては10分以上かかることがあります。 この時、main_01.pl がすでに起動していた場合、main_01.pl はすぐに exit; になるように組みたいのです。僕が考えた方法は、あるテキストファイルにロックをかけ、そのファイルがロック中であるならばプログラムは処理を行わずすぐに終了する、といった感じです。 =============================== # タイムアウト処理 my $timeout = 5; # 排他処理 my $lockfile="lock.txt"; # 多重起動停止 (ここに $lockfile が書き込めなかったらmain_01.plは別に起動していることになるので起動しない。) # 排他処理開始 open(LOCK,"$lockfile"); flock(LOCK,2); # 処理開始 eval { # タイムアウト local $SIG{ALRM} = sub { die "alarm\n" }; alarm( $timeout ); # プログラムスタート print "\n◆スタート\n\n"; sleep(4); # プログラム終了 print "\n◆終わりました。\n\n"; }; # タイムアウト処理 if ( $@ ) { # タイムアウト print "\nタイムアウトしました。TIMEOUT= $timeout \n"; } else { # タイムアウトせずに正常終了 print "\n正常終了しました。\n"; } # 排他処理終了 close(LOCK); exit;

    • ベストアンサー
    • Perl
  • 同じような質問で恐縮なんですが・・

    with the help ofの意味を教えて下さい。何度もすいません。

  • どうでもいい質問で恐縮ですが…

    何故、エガちゃん(江頭2:50)は”2:50”なのでしょうか?又、親父さんの江頭2:45氏は何故エガちゃんより5分だけ早いのでしょうか?何らかのこだわりがあるのでは…。是非お教え下さい。