[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/10 00:43 / Filesize : 262 KB / Number-of Response : 974
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【Perl】ファイルロック(排他処理)について語ろう



1 名前:nobodyさん [02/06/23 10:18 ID:eY2l+Gw1]
どんな環境でも使えて、軽くて、頑丈なロックを考えようじゃありません

552 名前:nobodyさん mailto:sage [03/11/05 02:38 ID:???]
>551
flockってロックしたファイルが閉じるまでに開いた他のファイルまで
全部ロックしちゃうの?


553 名前:nobodyさん mailto:sage [03/11/05 04:25 ID:???]
>>552
お前、リンク先のサイトの内容ちゃんと読んだか?

554 名前:nobodyさん mailto:sage [03/11/05 11:35 ID:???]
>>551
リンク先面白かった。初心者にもわかりやすい情報をWebで公開してくれる人って、尊敬。

555 名前:nobodyさん mailto:sage [03/11/05 14:16 ID:???]
>>553
読んだけど。
かいつまんで書くと

lockfileを開く
lockfileをロック
count.txtを開く
上書き
count.txtを閉じる
addr.txtを開く
追記
addr.txtを閉じる
lockfileをアンロック

だよね。
count.txtとaddr.txtには直接ロックかけてなくて
lockfileをロックすることによりこの二つのファイルもロックされてるらしいから
>551みたいに言った。


556 名前:nobodyさん mailto:sage [03/11/05 14:16 ID:???]
552だ。

557 名前:nobodyさん mailto:sage [03/11/05 14:28 ID:???]
ああ何となく解ってきた。
よく考えたらlockfileがロックされてるときはそこから先に進まないから大丈夫なのか。


558 名前:nobodyさん mailto:sage [03/11/08 02:04 ID:???]
ロック用ファイル作らなくても
どっちかのファイルにロックかけて最後まで開いてるままで十分だけどな。


559 名前:nobodyさん mailto:sage [03/11/08 13:26 ID:???]
>>558
あんた無茶苦茶言いますなぁ・・・

560 名前:nobodyさん mailto:sage [03/11/08 13:37 ID:???]
無茶苦茶???いったい何が???



561 名前:nobodyさん mailto:sage [03/11/08 15:28 ID:???]
>>559
count.txtにロックかけてそのままabbr.txtの処理終わるまで開いときゃ良いじゃん。


562 名前:nobodyさん mailto:sage [03/11/08 17:35 ID:???]
addrだった。

563 名前:nobodyさん mailto:sage [03/11/09 03:10 ID:???]
>>561
レアケースだろうけど
似たような事して壊れたことあるよ
無茶苦茶って事では無いだろうが、
そのやり方だと同時オープンで
2人アクセスしてきたのに1しかカウントアップしないって
ケースがタイミング良ければ発生する程度かな

564 名前:nobodyさん mailto:sage [03/11/09 10:32 ID:???]
>>561
どうやってロックするんですか?

565 名前:nobodyさん mailto:sage [03/11/09 14:47 ID:???]
>>563
なんでそうなる?単にヘボ実装だっただけじゃないの?

566 名前:nobodyさん mailto:sage [03/11/09 15:19 ID:???]
>>563
なるわけないだろうが

567 名前:nobodyさん mailto:sage [03/11/09 18:12 ID:???]
>563
単に読み込みをブロックしてなかっただけってオチなんじゃ。
それか二つのファイルでファイルハンドルを同じにしちゃったとか…。

>564
open(COUNT, "+<$cfile");
flock(COUNT, 2);
(中略)
open(ADDR, ">>$afile");
(中略)
close(ADDR);
couse(COUNT);


568 名前:nobodyさん mailto:sage [03/11/09 18:18 ID:???]
ちょっと複雑なシステムで
複数のスクリプトが複数の同じファイルを読み書きする場合は
ロック用ファイルを一つ用意する方が管理が楽なのは当たり前。

でもカウンターのようにファイルが単一のスクリプトからしか読み書きされない場合は
どちらか先に読む方のファイルをロックしておけば十分。


569 名前:nobodyさん mailto:sage [03/11/09 18:46 ID:???]
>>565
>>566
無能か?(w
ググルとたくさんでてくるぞ、そのケース

570 名前:nobodyさん mailto:sage [03/11/09 18:58 ID:???]
わけわかんね。
サーバがflockをきちんと使えないシステムを採用してたとかじゃないの?




571 名前:nobodyさん mailto:sage [03/11/09 19:03 ID:???]
>>569
きっと君と同じぐらい無能なやつなんだろうね
ここでそんなこと言ってるのも君ぐらいだし

572 名前:nobodyさん [03/11/09 19:42 ID:BVCYv2fe]
>>570,571
馴れ合いはよそでやれよ・・・
ま、>>555は書いてるとうりにすれば問題無し
わざわざ混乱させんでもよかろうに

573 名前:572 mailto:sage [03/11/09 19:48 ID:???]
ageちまっていいスレだよな・・・

それか、
>>567-571はジエン厨じゃあなかろうなぁ?


574 名前:nobodyさん [03/11/09 19:55 ID:4SnYD/Cs]
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |.本日選挙は20時迄!|
 |__________|
   ∧∧ ||
   ( ゚д゚)|| <残り10分切ったど!
   / づ     投票してない香具師は自衛隊の代わりにイラク逝けよ。

※総務省によると、総選挙の中間投票状況は
9日午後4時現在、全国平均で40.04%。前回を1.40ポイント下回っている。

575 名前:nobodyさん mailto:sage [03/11/09 19:59 ID:???]
>>573
あれが自演ならお前さんも>>569か?って事になるじゃん…。
本当だったら煽った挙句自演呼ばわりですかって感じで笑えるけど。


576 名前:nobodyさん mailto:sage [03/11/09 20:28 ID:???]
>>569
ハァ?
じゃあ「そのケース」とやらをここに貼れよ。
そのヘボ実装を検証してみようや。

577 名前:nobodyさん mailto:sage [03/11/09 20:54 ID:???]
>>572
馴れ合い?

578 名前:nobodyさん mailto:sage [03/11/09 21:14 ID:???]
>>577
「馴れ合い」の意味を知らないだけだろ。無知は構うな。ほっとけ。

579 名前:564 mailto:sage [03/11/10 14:47 ID:???]
あれ?flockが使える環境の人もこのスレの需要あったの?
まぁどっちでもこの場合変わらないけど。

580 名前:nobodyさん mailto:sage [03/11/10 14:53 ID:???]
>>561が勝手にflockと勘違いして
勝手に自分のやり方を押しつけたって事かぁ(・∀・)



581 名前:nobodyさん mailto:sage [03/11/10 16:11 ID:???]
>>580
ということにしたいのですね? :-)

582 名前:nobodyさん mailto:sage [03/11/10 16:19 ID:???]
もうほっとけほっとけ

583 名前:nobodyさん mailto:sage [03/11/10 16:43 ID:???]
♪か〜な〜しみ〜に〜であうた〜び〜

584 名前:nobodyさん mailto:sage [03/11/10 16:56 ID:???]
↓【Perl】flock() の使えない環境下でのファイルロック(排他処理)について語ろう

585 名前:nobodyさん mailto:sage [03/11/10 20:26 ID:???]
俺ん中の結論はRename形で、不雑なものになると管理が難しくなるんだよなぁ

586 名前:nobodyさん mailto:sage [03/11/10 20:34 ID:???]
>>585
何の管理?

587 名前:nobodyさん mailto:sage [03/11/10 20:37 ID:???]
同じディレクトリに複数のDATがある場合
ユニークなファイル名を生成するようにしないと。

…今思ったけど、たいした事無いなw

588 名前:蟻の子一匹通さないロック [03/11/14 04:40 ID:uv5dJ3X6]
10 GOTO アルカトラズ島;  # ロックへようこそ
20 処理;             
30 逆転無罪;          # 真犯人逮捕⇒釈放

589 名前:nobodyさん mailto:sage [03/11/14 05:44 ID:???]
>>580
>551からの流れでずっとflockの話だったわけだが。


590 名前:nobodyさん mailto:sage [03/11/14 16:05 ID:???]
どっちでも変わらん。
つーか変わってくるとしたらあれだ・・・


掲示板とかのスクリプトで
LOG→HTML随時吐き出し型
じゃなく
LOG=HTMLを表示する型
の場合、Rename型の排他処理は行えない可能性がある。

ということで。
結論から言えば退避ファイル名をhtml→htmとか適当に変えればいいんだろうけど。



591 名前:nobodyさん mailto:sage [03/11/14 17:52 ID:???]
このスレって二つの話題が流れてるんだが。

・flockが使えない環境ではどうしてる?
・ロックの有効性はその方法でなく、ロックを組み込む場所が大事。壊れる原因の大半は誤った使い方によるものなので、ありがちな落とし穴の再検証をしよう。

後者をよく理解してない初心者・中級者が、「flockで壊れた!flock使えねー」とわめいて、前者と後者をまぜこぜにして語って、スレが荒れるのが常。


592 名前:nobodyさん mailto:sage [03/11/14 18:00 ID:???]
それでわめいてるやつは中級とは言えないだろう

593 名前:nobodyさん mailto:sage [03/11/14 18:11 ID:???]
1 nobodyさん 02/06/23 10:18 ID:eY2l+Gw1
 どんな環境でも使えて、軽くて、頑丈なロックを考えようじゃありません

594 名前:nobodyさん mailto:sage [03/11/14 18:32 ID:???]
>>593
そいつは日本語が初心者なんだよw

595 名前:nobodyさん mailto:sage [03/11/14 18:38 ID:???]
たった今594が1を煽りました。

596 名前:nobodyさん mailto:sage [03/11/14 18:55 ID:???]
さあ、>>1よ щ(゚Д゚щ)カモーン!!

597 名前:nobodyさん mailto:sage [03/11/15 08:26 ID:???]
>>590はどうなの?

598 名前:nobodyさん mailto:sage [03/11/16 17:30 ID:???]
横レスすまんが、MySQLでも突っ込んでおけば、lockはぜんぶDBが
やってくれるやん・・・・・・・・ってのはだめなの?
あくまでOSにLockさせないとあかん?

599 名前:nobodyさん mailto:sage [03/11/16 17:34 ID:???]
はいはい、あっち行ってね

600 名前:nobodyさん mailto:sage [03/11/16 21:35 ID:???]
>>598
どうしてそうやって意地でも議論をループさせようとしますか?



601 名前:nobodyさん mailto:sage [03/11/17 02:04 ID:???]
あーごめん。実用の話じゃなくて、神学論争だったのね。
空気よめなかった。すまそ。

602 名前:nobodyさん mailto:sage [03/11/17 02:16 ID:???]
>>601
ていうか DB 使えるならその方がいいし、既に過去レスで全く同じやりとりが何度も出てるし。

603 名前:nobodyさん mailto:sage [03/11/18 14:37 ID:???]
>>601
釣れますか?

604 名前:nobodyさん mailto:sage [03/11/18 17:29 ID:???]
たとえば解析なしのアクセスカウンターにSQL使ってるのを俺は見た事ないな
俺が見た事ないだけかもしれないが

605 名前:nobodyさん mailto:sage [03/11/18 22:15 ID:???]
>>604 大規模サイトだと解析前提だからDBだな。そのほうが楽だし。
個人サイトならカウンタCGIを置くだけでしょ。壊れても問題ないし。

どしてもというなら、セマフォ管理するプロセスを立ち上げといて
それ使うって手もあるのかもしれんがそれならDB使うよ。
OSのファイルロックはアトミックじゃないっす。ソラリスでもそう。
マルチアクセス前提のファイルシステムもあるが、民生用じゃないな。

606 名前:nobodyさん mailto:sage [03/11/21 00:36 ID:???]
>>605
大規模サイトが、アクセスカウンターで解析するか?
ふつー、Webサーバのアクセスログを解析するだろ。

> OSのファイルロックはアトミックじゃないっす。ソラリスでもそう。
お前の使い方がヘボなだけ。

607 名前:nobodyさん mailto:sage [03/11/21 01:22 ID:???]
>>606 ログ解析だけで済めば世の中楽だよなー

608 名前:nobodyさん mailto:sage [03/11/21 01:56 ID:???]
607だけだとあおりみたいだから、いちおー。
確かに大規模サイトにはカウンタはないな。でもユーザーごとにレスポンスを
細かく制御すると、リアルタイムなユーザー管理いるからどうしてもDB。
ログ解析だけだとマーケティングデータしか出てこない。インタラクティブ
リアルタイムにそれ使わないと意味なしな。
静的なサイトでページビューだけでいいならログだけでいいけど、それじゃ
このスレの話題ずれる。
ちなみに俺はDB使わない程度のサイトならservletでロック処理。

609 名前:nobodyさん mailto:sage [03/11/21 02:13 ID:???]
>>608
スレタイを何度も声を出してよく読んでから発言した方が良いのでは?
どう考えてもあなたのレスはどれもこのスレにはお呼びでないと思うのですが?

610 名前:nobodyさん mailto:sage [03/11/21 02:23 ID:???]
>>609 あーすまん。607はあんまり口だすつもりなかったんだが
このスレには、人のことを「ヘボ」としか言わないやつがいて
それがどうもしゃくに障ったんでな。Perlの話しなくてスマソ。



611 名前:nobodyさん mailto:sage [03/11/22 00:21 ID:???]
>>608
Webアプリなら自前でログ持つ、バグ対応すること考えれば当たり前。

「ソラリス」なんて呼ぶ奴が「OSのファイルロックはアトミックじゃないっす」といった時は
使い方間違ってる確率99.9999%

612 名前:nobodyさん mailto:sage [03/11/23 05:00 ID:???]
「そらりす」って読んでた(;´Д`)アヒャ

613 名前:nobodyさん mailto:sage [03/11/23 05:24 ID:???]
>>612
いや、その読み方で合ってるし。

614 名前:nobodyさん mailto:sage [03/11/23 05:41 ID:???]
ところでDBMSで使ってるロック機構ってのは具体的にどんな処理なんでしょうか
単純に思いつくのはキューですが・・・
やっぱデーモンみたいな別プロセスに一括一元管理させるのが安全っちゃ安全ですよね?

615 名前:nobodyさん mailto:sage [03/12/04 07:40 ID:???]
ここは進行遅いですね。

結局、実用に耐えるファイルロックはどれなのか
スクリプト例でまとめて欲しい。おねがいエロイヒト。

616 名前:nobodyさん mailto:sage [03/12/04 11:19 ID:???]
>>10,>>12

617 名前:nobodyさん mailto:sage [03/12/13 19:02 ID:???]
昨日新しいファイルロック法思いついたんだけど寝て起きたら忘れてた

618 名前:nobodyさん mailto:sage [03/12/13 19:54 ID:???]
21世紀のファイルロックなんだろうな?

619 名前:nobodyさん mailto:sage [03/12/15 12:22 ID:???]
WinFS は SQLserver ベースになるそうだから
ファイルロックなんだかDBロックなんだかわからんような
あやしげなロックが提供されるんじゃないのか

620 名前:nobodyさん mailto:sage [03/12/15 19:16 ID:???]
Windowsはレジストリロックが使えます。
排他処理中はキーが書き込まれます。



621 名前:nobodyさん mailto:sage [03/12/19 21:19 ID:???]
今まで、flockが使えないと思ってたんだが、実は使えた!
ってこと無いですか?

622 名前:nobodyさん mailto:sage [03/12/19 23:28 ID:???]
ありませんね
あぁ、知識が足りなくて自分は使えないと?
やっぱりありませんね

623 名前:nobodyさん mailto:sage [03/12/20 02:36 ID:???]
$fp = fopen("test.txt", "a+");
if(!flock($fp, LOCK_EX)) { fclose($fp); echo "ns"; }
echo "ok";
これでいい?

624 名前:nobodyさん mailto:sage [03/12/20 02:38 ID:???]
windows環境で使えないと思ったけど普通に使えることに気が付いてびっくり。
つーかヘルプに書いてあった。

625 名前:nobodyさん [03/12/21 05:04 ID:FyNOPbG5]
きょうび、自作Perlスクリプトを置けるのに、flockが使えないISPなりレンタルサーバなんて、あるの?

626 名前:nobodyさん mailto:sage [03/12/21 16:43 ID:???]
yahoo

627 名前:nobodyさん mailto:sage [04/01/08 00:54 ID:???]
NiftyとかIswebとか使えるけど掛かるかどうかは保証しないとか言ってなかったっけ。
多分既出の話。

628 名前:nobodyさん mailto:sage [04/01/18 18:15 ID:???]
俺も需要がなくなってしまった。
ブックマークから外してしまおうかな。。

629 名前:nobodyさん mailto:sage [04/01/18 19:34 ID:???]
ひととおりネタは出尽くしたからもう外していいと思うよ。

630 名前:nobodyさん mailto:sage [04/01/18 20:27 ID:???]
でも、技術や発想的には応用が利くというかあれなので勿体無い気もする。
いままでありがとう。



631 名前:nobodyさん mailto:sage [04/01/19 01:52 ID:???]
テンプレが見たいなぁ、でも2スレまでいかんだろうなぁ。

632 名前:nobodyさん mailto:sage [04/03/11 20:28 ID:???]
久しぶりに着ますた。dat落ちしてなくてよかた。

ネタが尽きたところで脱線したいんですが、
includeしたりするファイルはflockの必要が無いことを前提としているんですかね。

書き換えや追記などを行うファイルに対し、
includeやrequireしたりするのはナンセンスということで合ってますか?

633 名前:nobodyさん mailto:sage [04/03/12 15:23 ID:???]
それは…
実行するperlスクリプト本体にflockの必要があるか、という話と同じなんじゃないかと

634 名前:nobodyさん mailto:sage [04/03/12 15:32 ID:???]
perl コマンド本体に flock する必要はありますか?

635 名前:nobodyさん mailto:sage [04/03/12 23:11 ID:???]
そういやperlメインのスレですね。スマソ。

PHPにおけるincludeやrequireは単にプログラムの記述されたファイルだけでなく、
HTML、PHP複合型やtxtまで読み込めるわけです。
そういった意味での質問です。

636 名前:nobodyさん mailto:sage [04/03/14 16:47 ID:???]
>>424
歯痛か!

637 名前:nobodyさん mailto:sage [04/03/15 12:04 ID:???]
>>635
php でも perl SSI でも何でもいいんだけど、ロックが重要になるのは基本的に、
ファイルを書き換えるプロセスが複数存在して競合する場合、つまり

A:----->読み込み------->処理-------->書き出し---------------------
B:------------------->読み込み------->処理-------->書き出し-------

のようなケースね。
ロックしないとマジでファイルが壊れたり情報が失われたりする。

これに対して include や require って、
読み込みオンリーで書き換えが有り得ないという前提なので、
上記のような書き込みの競合に参加しないわけで、
そういう意味ではロックの必要性が薄い。
(全く必要性が無いわけじゃないが、ほとんどの場合無視できる)

638 名前:nobodyさん mailto:sage [04/03/15 16:15 ID:???]
共有ロックのLOCK_SHってのがあるんですが、
厳密に言えばロックの必要性があることを示しているんですよね。

639 名前:nobodyさん mailto:sage [04/03/15 16:44 ID:???]
ロック「してもいい」ってだけで、「必要」かというとそうでもないんじゃない?

640 名前:nobodyさん mailto:sage [04/03/15 16:44 ID:???]
ていうか、ロックしてみたところで、書き換えようと思えばできるわけで。



641 名前:nobodyさん mailto:sage [04/03/15 18:08 ID:???]
perl は最初に一括コンパイルするからいいけど、
sh ってスクリプトを一行読み込んで実行してを繰り返すから、
実行途中にスクリプトを書き換えると結構悲惨なことになったりするよな。

642 名前:nobodyさん mailto:sage [04/03/17 13:37 ID:???]
rename使ってファイルロックかけるモジュール作って大ハマリしました。
どうもOSによっては、ファイルシステムの情報取得にタイムラグがあるようで、
renameかけても、OSが保持するファイル情報が即座に更新されないために、
同じ元ファイル名からのrenameが成功してしまうことがありました。

より正確にrename形式でファイルロックをかけるには、
rename後に若干のタイムラグを置いて、rename後のファイルの存在チェックが通れば
ロック成功と考えた方がいいですね。

ちなみに、WinXP+NTFSの組み合わせでそれらの現象がありました。
Linuxだったりすると、こういう現象は出てきますでしょうか?

643 名前:nobodyさん mailto:sage [04/03/17 16:25 ID:???]
んなバカな。
何か間違っている。

644 名前:nobodyさん mailto:sage [04/03/17 18:02 ID:???]
>>642
君が作ったのを晒してくれないか

645 名前:nobodyさん mailto:sage [04/03/18 13:24 ID:???]
>>644
了解です。
ttp://www.mindcompass.sfcgi.com/misc/LOCK.pm.txt

646 名前:nobodyさん mailto:sage [04/03/19 13:53 ID:???]
とりあえずmkdirやrenameを実行した後
仕方なく-dや-eをしなさい。

647 名前:642 mailto:sage [04/03/19 16:28 ID:???]
>>646

その辺(ファイル操作後の存在チェック)は仕方なく実装してます。
同一プロセスで、同じファイルからのrenameコマンドを連続して実行すると、2回目は失敗(これが通常動作)するので、
他プロセスでのファイル操作の結果が反映されるのが遅いらしい。

648 名前:nobodyさん mailto:sage [04/03/19 16:33 ID:???]
-d or mkdirじゃなくてmkdir or !-d

649 名前:nobodyさん [04/03/29 10:00 ID:WLF8C9h8]
ログに「This is a test1.」と10万回書くCGIと「This is a test2.」と10万回書くCGIを二つ同時起動させてみた。
ログにはきちんと20万行書かれてた。

for ($i = 0; $i < 10000; $i++) {
  open (DATA, ">>$file");
  flock (DATA, 2);
  print DATA $str;
  close DATA;
}

こういうのじゃ、そのOSでflockが使用可能かって言う確認にはならないのですか?
ちなみに、環境はWin2KとActivePerl5.6.1で試しましたが。

650 名前:nobodyさん mailto:sage [04/03/29 17:51 ID:???]
>>649
そもそも flock が使用不能なら呼び出した時点で実装されてないって怒られます。
実用的に使用可能か、という意味なら実際に試してみる価値があるかもしれません。
ただし、自分の想定している条件に近くないとあまり意味がないと思います。



651 名前:nobodyさん mailto:sage [04/03/31 01:14 ID:???]
子プロセスを10個forkしてプロセス一つで1000回カウンタを回すスクリプト使ってる。
perlで壊れないロックはflock()だけだった。

652 名前:nobodyさん mailto:sage [04/03/31 05:45 ID:???]
2chのロックはchmod()でやってるらしいね。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<262KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef