1 名前:nobodyさん [02/06/23 10:18 ID:eY2l+Gw1] どんな環境でも使えて、軽くて、頑丈なロックを考えようじゃありません
381 名前:nobodyさん mailto:a [03/05/22 13:46 ID:???] 20代OLです毎日上司のセクハラや通勤電車での痴漢でストレスがたまっていた そのときにネットで見つけたアダルトDVDショップ以前からオナニー用にDVD が欲しかったのですぐ注文しました、とても安くてびっくりしましたが次の日には もう届きました私が買ったのは、オナニー、レズ、レイプです毎日オナニーしてま す。 www.net-de-dvd.com/
382 名前:nobodyさん mailto:sage [03/05/22 13:53 ID:???] >>380 ttp://homepage1.nifty.com/glass/tom_neko/web/web_04.html このへんでも参考に
383 名前:380 じゃないけど mailto:sage [03/05/22 15:06 ID:???] >>382 激しく参考になりますた。謝謝。 ところで flock() が使えないところで eval{ if(!(flock(FH, 2))){ &function; } }; とした場合ちゃんとサブルチンに逝ってくれますか? false は返ってくるんでしょうか?
384 名前:nobodyさん [03/05/22 15:40 ID:Mzhw6+0o] >>382 サンクスコ(・∀・)
385 名前:nobodyさん [03/05/23 13:24 ID:ORCLTuvq] ロックする時にmkdirでディレクトリを作って、 アンロックする時にrmdirでディレクトリ削除ってことですよね? >>382 のサイト見てないけど…。
386 名前:nobodyさん mailto:sage [03/05/23 13:28 ID:???] >>385 見ろ。
387 名前:山崎渉 mailto:(^^) [03/05/28 17:07 ID:???] ∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
388 名前:nobodyさん mailto:hage [03/05/28 18:03 ID:???] age
389 名前:nobodyさん [03/05/31 21:04 ID:n0OtuFEQ] ロックされてるかどうか調べるにはどうしたらいい? 他のプロセスでロックしてるファイルにアクセスしてもロックがすぐ終っちゃうような…。 どうすれバインダー。
390 名前:動画直リン [03/05/31 21:10 ID:1EAhrEiJ] homepage.mac.com/hitomi18/
391 名前:nobodyさん mailto:sage [03/05/31 21:44 ID:???] >>389 激しくロックの方法に依ると思うんだが。
392 名前:389 [03/05/31 21:45 ID:n0OtuFEQ] 全般的にできるのはないの?
393 名前:nobodyさん [03/05/31 22:08 ID:nC5SP5sD] >>392 ロック中に sleep 60;
394 名前:nobodyさん mailto:sage [03/05/31 23:30 ID:???] 弱いかな? package FileLock; use IO::File; my $CAT= '/bin/cat'; sub open_w { my $filename= shift; mkdir($filename)unless -d $filename; my $base= sprintf("%s.%s.",time,$$); my $cnt= 0; $cnt++ while(-f "$filename/$base$cnt"); return IO::File->new("$filename/$base$cnt",'>>'); } sub open_r { my $filename= shift; return IO::File->new("|$CAT $filename/*"); } 1;
395 名前:nobodyさん [03/06/01 04:57 ID:Hll/ZLYf] >>393 おぉ!蟻がとう。
396 名前:nobodyさん mailto:sage [03/06/01 12:29 ID:???] >>393 禿げ藁
397 名前:nobodyさん mailto:sage [03/06/01 13:22 ID:???] >>394 駄目ロック。これ使うならロックしなくていい。
398 名前:nobodyさん mailto:sage [03/06/01 21:54 ID:???] アンケートみたいに読み出しが少なくて、書き込みが多いときに flockと組み合わせて(かつcron回してファイルをまとめつつ) 使ってたんだけど。。。駄目かぁ(´Д`;)
399 名前:nobodyさん mailto:sage [03/06/02 00:36 ID:???] >>398 > mkdir($filename)unless -d $filename; 意味なし。複数のプロセスでunless -d $filenameが成立する可能性がある。 排他制御するにはアトミックにやらないと駄目。 排他制御に強い/弱いは無い。正しいか駄目のどちらか一方、わずかでも可能性があれば駄目ロック。
400 名前:nobodyさん [03/06/02 09:59 ID:7y9vki3n] そういえばみんななんで、 --$retry <= 0 なんてやってるの? $retry-- じゃまずいの?
401 名前:nobodyさん [03/06/02 10:09 ID:Ixodm31c] みてね♪ www1.free-city.net/home/s-rf9/page006.html
402 名前:nobodyさん [03/06/02 10:20 ID:sw1UrgM5] ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´∀`)/< 先生もろDVDはどこですか? _ / / / \___________ \⊂ノ ̄ ̄ ̄ ̄\ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄|| || || ̄ ̄ ̄ ̄ ̄|| ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ .|| || (´Д` ) < www.dvd01.hamstar.jp だ! / \ \___________ || || || || __ //_ //___ / // // / /  ̄  ̄ // || ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|| || || ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|| || || 教卓 || || || ||
403 名前:nobodyさん mailto:sage [03/06/02 10:29 ID:???] >>400 デクリメントの事言ってるのか? 前置きと、後置きでは、動作が違う。 そして、スレ違い。
404 名前:nobodyさん [03/06/02 10:35 ID:azLkJHuz] >>403 いやいや、なんで<=を使ってるかが知りたいの? ifって偽だと実行しないでしょ? $retryは最終的に0になるわけだから、<=は必要ないだろ。 ってかスレ違いって分かってるので、逝ってきます。
405 名前:nobodyさん [03/06/02 10:39 ID:7y9vki3n] 良く見たら答えが分かった。馬鹿か俺。 やっぱり逝くしかないな…。
406 名前:直リン [03/06/02 11:10 ID:mGHfwiJV] homepage.mac.com/yuuka20/
407 名前:nobodyさん mailto:sage [03/06/02 11:20 ID:???] >>404-405 0は偽だが、-1は真になる。 上げてる時点で逝ってください( ̄人 ̄)
408 名前:nobodyさん mailto:sage [03/06/02 11:42 ID:???] >>407 でも絶対-1にはならなくない? まだ逝ってないよ、俺。
409 名前:nobodyさん mailto:sage [03/06/02 12:07 ID:???] >>408 いや・・・だからさ・・・ 全体のソース読んでないんで分からないんだけど。 マイナスになる可能性があるかもしれないんでしょ? --$retry <= 0 この条件だと、$retryがもし0だったら・・・ -1 <= 0 こんな判定になるし。 0が入る訳がないソースだったとしても、 ちゃんと条件書いてる方が、見た目分かりやすいってのもある。 そして、スレ違いだから、やっぱ逝くべき。
410 名前:nobodyさん mailto:sage [03/06/02 12:14 ID:???] >>404 > いやいや、なんで<=を使ってるかが知りたいの? ・・・え? 問い掛けられても・・・
411 名前:nobodyさん mailto:sage [03/06/02 12:16 ID:???] >>408 > でも絶対-1にはならなくない? お前プログラマに向いてない。確実に-1になる。わかったら逝け、わからなくても逝け。
412 名前:nobodyさん [03/06/02 12:47 ID:YkiHze2n] >>411 うおっ!キツイ一言だな…。 でもこのスレのヤシらはなんか優しい…。 すっきりしたら逝くから、すっきりさせろYO! なんで-1になるんだ? 粘着房だな…。
413 名前:nobodyさん mailto:sage [03/06/02 13:02 ID:???] >>412 だから・・・・ --$retry <= 0 ↑これだけ見せられて、-1になるか、ならないかって言われても、 分からない訳なのよ。 どのソースみて、言ってる訳? とにかく、その一行を見る限りでは、-1になる可能性はある。 何度も言うようにスレ違いだから、優しいうちに逝っとけ。
414 名前:動画直リン [03/06/02 13:10 ID:mGHfwiJV] homepage.mac.com/hitomi18/
415 名前:nobodyさん mailto:sage [03/06/02 13:14 ID:???] >>413 そういうことね。 上の方のソースやKENTのソース。 おとなしく逝っときます。 スレ違いのことをしつこくスマンカッタ…。
416 名前:nobodyさん mailto:sage [03/06/02 13:43 ID:???] Cプログラマ的にはif (--retry)の方が早い気がする。 気がするであって、気にする奴が本当に気にしなきゃいけない場合はアセンブラで書く。
417 名前:_ mailto:sage [03/06/02 14:38 ID:???] homepage.mac.com/hiroyuki43/moe/jaz01.html
418 名前:_ mailto:sage [03/06/02 16:09 ID:???] homepage.mac.com/hiroyuki43/moe/jaz01.html
419 名前:_ mailto:sage [03/06/02 19:13 ID:???] homepage.mac.com/hiroyuki43/hankaku/hankaku07.html
420 名前:nobodyさん mailto:sage [03/06/03 08:26 ID:???] >>416 おまえも素質ないから早くプログラマから足洗った方がいいぞ。
421 名前:nobodyさん mailto:sage [03/06/17 05:57 ID:???] search.cpan.org/author/MAKOTO/IO-File-flock-0.07/ これって使っても平気ですか?
422 名前:nobodyさん mailto:sage [03/06/22 16:13 ID:???] 房な質問なんですけど、そんな頻繁にデッドロックって起こるものなんでしょうか?
423 名前:nobodyさん mailto:sage [03/07/07 19:32 ID:???] 10 'ファイルの書き込み 20 Open "Text1.txt" For Output As #1 30 Print #1,"Write file." 40 Close #1 ファイルロックのためのtmpファイル作成しようと思ったんですが、 プログラム内で擬似マルチタスクを作成している時といないときがあるので、 flock関数みたいなものがあれば効率が上がると思うのですが、 やはりrename形の方が安全で軽いのでしょうか?
424 名前:なぞなぞ先生 mailto:sage [03/07/08 06:24 ID:???] 排他処理するために必要な国家資格はなぁんだ?
425 名前:nobodyさん mailto:sage [03/07/08 12:02 ID:???] 情報処理
426 名前:nobodyさん mailto:sage [03/07/08 12:12 ID:???] >>424 歯科医師
427 名前:nobodyさん mailto:sage [03/07/08 12:19 ID:???] 国家公務員一級
428 名前:nobodyさん mailto:sage [03/07/08 15:54 ID:???] シスアドだべ。
429 名前:nobodyさん mailto:sage [03/07/08 15:58 ID:???] 公害防止管理者だろ
430 名前:nobodyさん mailto:sage [03/07/09 00:33 ID:???] >>426 司会者?
431 名前:nobodyさん [03/07/10 16:21 ID:QDkm5VXP] 初心者で申し訳ない。 flock使えるサーバなんだけど、書き込み中はロックするっていう 対象のファイルをflockの引数にするのと、別のダミーファイルを flockの引数にするのとあるでしょ。どっちがいいのでつか。
432 名前:nobodyさん mailto:sage [03/07/10 17:46 ID:???] 場合によるっしょ。 処理全体にかけたいなら後者の方が良いかと。
433 名前:nobodyさん mailto:sage [03/07/10 21:42 ID:???] 先生、Webプログラミング界では共有ロックが理解されていません
434 名前:431 mailto:sage [03/07/10 22:35 ID:???] >>432 ありがとん。 >>433 漏れのこと言ってるようでつね。勉強してきまつ。
435 名前:nobodyさん mailto:sage [03/07/11 11:17 ID:???] そりゃステレオタイプだ
436 名前:nobodyさん mailto:sage [03/07/14 17:20 ID:???] >>424 おまいいい加減教えろ!
437 名前:なぞなぞ先生 mailto:sage [03/07/15 06:43 ID:???] OSやSOFTWAREの基本的なことで申し訳ないのですが、 完全に同時にプロセスが発生することはないよね? マルチタスクってのもマルチスレッドってのも基本的に擬似的に行っているもので、 結局は1つのプロセスが司っている処理って聞いたことがあったような。 そうすると、OSがダウンしない限りrename型の排他処理 rename open 処理 close rename は完璧に有効だと思うんだが。 と思ったけど、それを言い始めたらキリが無いかw うーん、、、しかしたまに2chで1001を超えるのは何でだろう。 ロック解除してから1001のチェックをしているのかな。。。 最近うなされて困ってます。変な文&長文すまん。
438 名前:nobodyさん mailto:sage [03/07/15 06:44 ID:???] いかぁん、名前が残ってた!!! 氏のう。。。。
439 名前:山崎 渉 mailto:(^^) [03/07/15 11:08 ID:???] __∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
440 名前:nobodyさん mailto:sage [03/07/15 19:03 ID:???] >>437 レスが1000を超えるのはdatファイルへの書き込みと、 レスポンス数のチェック(書き込み禁止処理)がアトミックにできないから。 実際には、二つの処理に結構な間があると思う。
441 名前:nobodyさん mailto:sage [03/07/15 22:40 ID:???] ∩ | | ∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´ー`)// < 先生! / / | アトミックって何ですか? / /| / \___________ __| | .| | __ \  ̄ ̄ ̄ ̄ ̄ \ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ || || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| .|| ||
442 名前:nobodyさん mailto:sage [03/07/15 23:25 ID:???] 表現がおかしい?(慣れない横文字は使うもんじゃないね 他のプロセスが割り込めない極小時間(ワンステップ)で操作。 にしといてくださいな。
443 名前:nobodyさん mailto:sage [03/07/16 07:27 ID:???] いや、アトミックという言葉は普通に使うと思うぞ ましてやファイルロックの話題ならなおさら
444 名前:437 mailto:sage [03/07/16 08:09 ID:???] その件なのですが、1000のカキコをログに書き込んだら、 ファイルロック中に何らかの処理(たとえば別ファイルにHTML書き出しやHTML化待ちDATリストへの追加) をすれば、"アトミック"は存在しないと思うのですが。 下手な考えスマソ。。。
445 名前:440 mailto:sage [03/07/16 22:09 ID:???] >>444 ああっと、flockが頭にあったので、、 renameが理想的なロックとして動作するとしたら>>437 で可能だと思います。 (OSがlinuxの場合は壊れたりするけど…) 2chとしては、1000で止まらなくても(多少レスが多く付いても)構わないのかも。 (ロックする時間が増える→待ちプロセス数が増える→サーバ負荷が増えるよりは。)
446 名前:437 mailto:sage [03/07/17 00:22 ID:???] >ロックする時間が増える→待ちプロセス数が増える→サーバ負荷が増える 2chみたいな大規模な掲示板だとここが問題なんですね。 ぐっすり眠れそうな気がしました。レスありがとうございました。
447 名前:nobodyさん mailto:sage [03/07/19 14:28 ID:???] 2ch互換スクリプトの場合、スレ立て処理に問題抱えてる場合があるので注意。 スレッドキー(ファイル名)決定と、ファイル作成(書き込み)を別の場所で 行っている事がほとんどなので、同時にスレ立てが発生するとスレッドが 合体する可能性がある。 半年前あたり2chでもちょっと問題になってた。 実際としては2ch以外で問題になることは無いと思うけどね。
448 名前:nobodyさん mailto:sage [03/07/20 07:55 ID:???] >>447 スレアドレス決定とファイル作成を同じスクリプトで行えばオッケー?
449 名前:nobodyさん mailto:sage [03/07/20 09:18 ID:???] >>448 そういうことじゃない。 スクリプトの中でキー決定からファイル作成までの間に いろいろな処理があって、同時スレ立ての一方がファイル作成前に もう一方がそのキーのスレがあるか確認して存在しないと 判断してしまう時差の問題が起こりえるということ。
450 名前:nobodyさん [03/07/26 13:13 ID:GHzBAdl/] flock のロックをしたいんですが、 具体的に何をすれば良いのでしょうか? flock と言う名前のディレクトリを 作って、ロックしたいファイルに 置いとけば良いのでしょうか? すいませんが、まるっきりの初心者ですので、 教えて下さい。
451 名前:nobodyさん mailto:sage [03/07/26 13:24 ID:???] >>450 >>1-449
452 名前:nobodyさん mailto:sage [03/07/26 13:55 ID:???] >>451 ワロタ! でも、イイ!
453 名前:_ mailto:sage [03/07/26 13:55 ID:???] homepage.mac.com/hiroyuki44/
454 名前:nobodyさん mailto:sage [03/07/26 18:00 ID:???] YOU THE☆ROCKは綴りが違いますが、このスレの親戚ですか? flockするファイルのあるディレクトリのパーミッションは任意たんでよいですか? 自分の中で最高の条件を満たすレンタル鯖がflock使えないとかなりへこむ。。。 結局rename型のlockにしてみたんだが、鯖の負荷とか考えたくないなぁ。 ブロードバンド回線開通したら絶対鯖立てたい。 と言う独り言でした。また来週。
455 名前:nobodyさん mailto:sage [03/07/26 22:03 ID:???] やっぱりファイルで何らかのロック処理をした後、 flockも使うのが最強ですかね?
456 名前:nobodyさん mailto:sage [03/07/26 22:40 ID:???] じっさまなら誰もおこらねぇけど、
457 名前:nobodyさん mailto:sage [03/07/27 01:31 ID:???] >>455 ハァ、Webプログラマーってどうして馬鹿ばっか集まるんだ。 排他制御に強い/弱いはない。正しい/駄目のどちらかだ。 駄目なものをいくつ重ねても駄目なものは駄目。正しい方法を複数使う必要はない。
458 名前:nobodyさん mailto:sage [03/07/27 03:14 ID:???] 結論が出てしまったな・・・
459 名前:nobodyさん mailto:sage [03/07/27 09:30 ID:???] ドコ━━━(゚Д゚≡(゚Д゚≡゚Д゚)≡゚Д゚)━━━━!!!!???
460 名前:nobodyさん mailto:sage [03/07/27 20:51 ID:???] Iriaにセキュリティーホールらしいぞ。 tv3.2ch.net/test/read.cgi/geino/1050253651/377
461 名前:nobodyさん mailto:sage [03/08/04 22:07 ID:???] 今の今までflockできないとおもってたが、パーミッション777で解決しちった。
462 名前:nobodyさん [03/08/06 01:55 ID:pOGj2Sy2] てす
463 名前:nobodyさん [03/08/06 01:56 ID:pOGj2Sy2] てすてす
464 名前:nobodyさん [03/08/06 01:56 ID:pOGj2Sy2] と
465 名前:nobodyさん [03/08/07 14:03 ID:fxtSTKIN] ちょっと思った。 use Fcntl; をしといて、 sysopen を使ってLOCK_EXとか呼べないかな。
466 名前:nobodyさん mailto:sage [03/08/07 14:18 ID:???] 意味不明。 LOCK_EXは定数(を返すだけのsub)
467 名前:nobodyさん mailto:sage [03/08/07 15:00 ID:???] use Fcntl; sysopen FILE,"hoge",O_RDWR|O_CREAT|LOCK_EX; みたいなことできるかってこと? 試してみてね。 俺は知らん。
468 名前:nobodyさん mailto:sage [03/08/08 01:36 ID:???] >>465 use Fcntl;するならO_SHLOCKとO_EXLOCKが使えるでしょ。 Win系はシラネ。
469 名前:nobodyさん mailto:sage [03/08/08 04:05 ID:???] >>465 うん、使える。 O_EXLOCKを使ってsysopenで書いてあげたら もっとスマートなlockができそう。
470 名前:nobodyさん mailto:sage [03/08/09 22:15 ID:???] >>465 use IO::File::fock; my $fh = new IO::File::fock('file','>>');
471 名前:山崎 渉 mailto:(^^) [03/08/15 22:42 ID:???] (⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
472 名前:nobodyさん mailto:sage [03/08/24 11:20 ID:???] flock使えます。 追記の場合って、どうするのが一番確実で負荷がかかんないんでしょうか? 僕は、データを編集する場合と同じように、以下のようにしちゃってますが。use Fcntl qw(:flock); #万が一リネーム失敗したときのために、ユニークなファイル名にしておく $tmpfile = "$datafile".".$$.". time() .".csv"; #ロックファイルを作成する(★注:ロックファイルは、各CSVごとにユニークに) open (LOCKF, ">$datafile"."_lockf") or die("cannot open:$!"); flock (LOCKF, LOCK_EX); #ロックファイルをflockする open(IN, "< $datafile") or die("cannot open:$!"); # 読みのみモードで開く open(TMP,"> $tmpfile"); #テンポラリファイルを作成 while ($line = <IN>){ $line .= <IN> while ($line =~ tr/"// % 2 and !eof(IN)); $line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/; @values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_} ($line =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g); #必要なものだけをEUCにして、出力時にSJISにする foreach $value (@values){ &jcode::convert(\$value, "euc"); }; #CSV形式に変換 $newline = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @values; print TMP "$newline\n" ;#テンポラリファイルに1レコード書き込み } print TMP "新しい行" . "\n"; close TMP; close IN; unlink $datafile; rename ($tmpfile, $datafile) or die ("cannot rename : $!"); close LOCKF;
473 名前:472 [03/08/24 11:25 ID:xfHM1yWk] あ、よく考えたら、既存の行をいちいち@valuesにする必要はないんだ・・・ 訂正。 ↓これでどうでしょか? use Fcntl qw(:flock); #万が一リネーム失敗したときのために、ユニークなファイル名にしておく $tmpfile = "$datafile".".$$.". time() .".csv"; #ロックファイルを作成する(★注:ロックファイルは、各CSVごとにユニークに) open (LOCKF, ">$datafile"."_lockf") or die("cannot open:$!"); flock (LOCKF, LOCK_EX); #ロックファイルをflockする open(IN, "< $datafile") or die("cannot open:$!"); # 読みのみモードで開く open(TMP,"> $tmpfile"); #テンポラリファイルを作成 while ($line = <IN>){ print TMP $line ; } print TMP "新しい行" . "\n"; close TMP; close IN; unlink $datafile; rename ($tmpfile, $datafile) or die ("cannot rename : $!"); close LOCKF;
474 名前:472 [03/08/24 11:57 ID:xfHM1yWk] あるいはもう1つの選択枝。 単純に、 use Fcntl qw(:flock); open(OUT, "+< $datafile"); flock (LOCKF, LOCK_EX); truncate(OUT, 0); # ファイルサイズを0バイトにする seek(OUT, 0, 0); # ファイルポインタを先頭にセット print OUT "新しい行" . "\n";; # 書き込む close(OUT); # closeすれば自動でロック解除 ・・・・どっちがいいのでしょうか・・・?
475 名前:nobodyさん mailto:sage [03/08/24 12:53 ID:???] >>474 追記なら use Fcntl qw(:flock); open(OUT, ">>$datafile"); flock (OUT, LOCK_EX); seek(OUT, 0, 2); # ファイルポインタを最後尾にセット(念のため) print OUT "新しい行" . "\n";; # 書き込む close(OUT); # closeすれば自動でロック解除 -- # 私はこんな感じ(Win不可) use FileHnadle; my $fh = new FileHandle($datafile, O_WRONLY|O_CREAT|O_APPEND|O_EXLOCK) or die; print $fh '新しい行', "\n"; close($fh); IO::Fileでもいいんだけど、趣味でFileHandle使ってます。
476 名前:nobodyさん mailto:sage [03/08/27 11:26 ID:???] 某K氏のアクセス解析でFlock使うようにしようとしたのですが open(LOG, ">$logfile") or &error("Open Error : $logfile"); flock(LOG, 2); seek(LOG, 0, 2); my(@lines) = <LOG>; (if($agent =~ /MSIE 3/i) { $agent = 'MSIE 3'; }のような置換とか) while($max-1 < @lines) { pop(@lines); } unshift(@lines, "$agent<>$os<>$host<>$referer<>$hour<>$doc_uri<>\n"); unshift(@lines, "$addr\n"); print LOG @lines; close(LOG); こうすると書き込み時にログが一旦全部消えてしまい、 取得した最後のログ一行(先頭行に最終アクセスIPがあるので正確には二行)のみになってしまいます。 何処が悪いのでしょうか… 因みに元スクリプトではログを配列に読み込んだ時点で一旦閉じ、 処理後もう一度開いて書き込みという風になってたのですが、 これだと処理中に書き込まれたら駄目そうな気がしたので上のように書き換えたのです。
477 名前:nobodyさん mailto:sage [03/08/27 19:09 ID:???] >>476 lockどうこうより、while がおかしいのでは? $max-1 < @lines がどういう比較かわからんけど、自分で pop(@lines);して削除しちゃってるじゃないの 常にwhileが真で全行削除になってその後unshiftで2行追加してるだけでは?
478 名前:nobodyさん mailto:sage [03/08/27 21:08 ID:???] >open(LOG, ">$logfile") or &error("Open Error : $logfile"); '>'でオープンすると? ・ファイルの中身を切り詰める。 ・書き込み専用でオープンする(ファイルが無ければ作成)。 >seek(LOG, 0, 2); この意味は? ・フィル最後尾にファイルハンドルを移動する。 さすがに読めません。
479 名前:nobodyさん mailto:sage [03/08/27 21:09 ID:???] open(LOG, "+<$logfile") or &error("Open Error : $logfile"); flock(LOG, 2); my (@lines) = <LOG>; (ロックスレなので、、略) seek(LOG, 0, 0); truncate(LOG, 0); print LOG @lines; close(LOG); 上の書き方では、seekとtruncateの間で終了させられると、 ファイルの中身が失う危険性があるから、 seek(LOG, 0, 0); print LOG @lines; truncate(LOG, ftell(LOG)); close(LOG); と書くといいらしいです。(実際はどうなんでしょ?) www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq5.html#How_come_when_I_open_the_file_re www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq5.html#I_still_don_t_get_locking_I_jus クックブック 7.11 ttp://homepage1.nifty.com/glass/tom_neko/web/web_04.html
480 名前:479 mailto:sage [03/08/27 22:53 ID:???] >truncate(LOG, ftell(LOG)); 間違いでした。以下の通り。 truncate(LOG, tell(LOG));
481 名前:nobodyさん mailto:sage [03/08/28 11:06 ID:???] ログだったら、追記で開いて、flockしてファイルの尻seekするだけじゃ だめなの?