1 名前:nobodyさん [02/06/23 10:18 ID:eY2l+Gw1] どんな環境でも使えて、軽くて、頑丈なロックを考えようじゃありません
696 名前:nobodyさん mailto:sage [04/05/20 22:40 ID:???] >>694 単に、書き込みが100%重複しない論理空間を仮定すれば、というだけの話でしょ。 もちろん現実にそんなことはありえないと暗示しているわけで。
697 名前:685 mailto:sage [04/05/21 01:02 ID:???] 皆様回答ありがとうございます。 >>693 という事は書き込みが重複しないなら、 ファイルロックで防げる程度のトラブルは防げるという事ですね。 >>694 書き込み処理を行えるのがパスワードを知っている1人なのです。 パスワードが他人に漏れず、その1人が同時に操作せず、 openしたまま処理が中断することもない・・・ という仮定はありますが。 ファルイロックの基本的な知識さえない私に丁寧な回答ありがとうございました。
698 名前:nobodyさん mailto:sage [04/05/27 13:48 ID:???] やっと最近になってきっちりしたファイルロックのコード書けるようになった。 けっこうウソ書いてあるサイトが多いのに驚いた。
699 名前:nobodyさん mailto:sage [04/05/27 17:15 ID:???] >>698 そういうサイトもきっちり書けていると思ってんだろ。 お前と同じように。
700 名前:nobodyさん mailto:sage [04/05/27 20:14 ID:???] きっちり書けるようになったと自分で思い込むのは勝手だが、他人には言うな。
701 名前:nobodyさん mailto:sage [04/05/27 21:10 ID:???] どうキッチリ書いたか教えて欲しい
702 名前:nobodyさん mailto:sage [04/05/27 21:08 ID:???] どう書いたか教えて欲しい
703 名前:nobodyさん mailto:期待上げ [04/05/28 01:38 ID:???] うん 見せてよ
704 名前:698 mailto:sage [04/05/28 11:16 ID:???] わたしは秘密主義なんで弟子にも教えることはない。 自分で掴み取れ! これに尽きるな
705 名前:nobodyさん mailto:sage [04/05/28 15:29 ID:???] ふっ。これで糞コード蔓延の芽がまた一つ摘み取られた。良かった良かった。
706 名前:nobodyさん mailto:sage [04/05/30 14:43 ID:???] ファイルロックなんかしなくったって、めっちゃ速く処理してしまえばええやん
707 名前:nobodyさん mailto:sage [04/05/30 14:44 ID:???] >>706 すげー!! それだっ!
708 名前:nobodyさん mailto:age [04/05/30 18:12 ID:???] ファイルロックなんかしなくったって、誰もアクセスしなければええやん
709 名前:nobodyさん mailto:sage [04/05/30 22:14 ID:???] windowsならmutexを使う手があるよん。名前にファイルパス(\は/に置き換えたやつ) を使う。速いしいいぞ。
710 名前:709 mailto:sage [04/05/30 22:16 ID:???] はっ、ここはPerlの板だった。 xs使って作るしか、、、。
711 名前:nobodyさん mailto:sage [04/05/30 22:23 ID:???] >>709 Win32::Mutex search.cpan.org/~gsar/libwin32-0.191/
712 名前:nobodyさん mailto:sage [04/05/31 00:08 ID:???] おお、あるんだ。 他のOSとかもないのかな。 lock::mutexとかいう一本にまとめて使えるようなライブラリがいいなぁ。 mutexもセマフォも使えないけどflockは使えるOSだったら、 内部実装はflockでやるとか。
713 名前:357 mailto:sage [04/05/31 20:57 ID:???] flock使えない機種でmutexを使ってflock模擬したほうがいいか。
714 名前:713 mailto:sage [04/05/31 22:53 ID:???] うわ、名前間違えた。
715 名前:nobodyさん mailto:age [04/10/09 22:28:45 ID:???] ダレモイナィ タアソウスルナラ イマノウチ
716 名前:nobodyさん mailto:sage [04/10/09 23:12:22 ID:???] open(LOCK, ">lock.tmp"); flock(LOCK,2); open (IN, "count.dat"); $count=<IN>; close(IN); $count=$count++; open (OUT, ">count.tmp"); print OUT $count; close(OUT); rename("count.tmp","count.dat"); unlink("lock.tmp"); flock(LOCK,8); close(LOCK); これでOK?
717 名前:nobodyさん mailto:sage [04/10/10 04:46:13 ID:???] 萌えは初心者だから良くわからないけど、 $count=$count++; は $count++; でいいと思うけど。
718 名前:nobodyさん mailto:sage [04/10/10 16:53:04 ID:???] >>716 いいえNG
719 名前:716 mailto:sage [04/10/10 16:59:43 ID:???] >>718 どこら辺がNG?
720 名前:nobodyさん mailto:sage [04/10/10 17:10:11 ID:???] 無駄なことをやってるだけだろ open (IN, "count.dat"); flock(IN,2); $count=<IN>; $count++; print IN $count; close(IN); これでいいじゃん
721 名前:716 mailto:sage [04/10/10 17:16:22 ID:???] えっ?それじゃ書き込めないのでは?
722 名前:nobodyさん mailto:sage [04/10/10 17:19:40 ID:???] すまん open (IN, "+>count.dat");
723 名前:716 mailto:sage [04/10/10 17:36:23 ID:???] カウンタだとそれでいいけど、掲示板など複数のファイルを弄る場合にはロック用のファイルが必要になるよね?
724 名前:nobodyさん mailto:sage [04/10/10 17:43:35 ID:???] >>723 そんなのは一概には言えない。 各ファイルは読み込み・書き込み・両方のいずれなのか、 一度に連続して読み書きするのかなど。
725 名前:nobodyさん [04/10/20 14:16:48 ID:ejI/DpjA] aaa
726 名前:nobodyさん [04/10/21 19:09:46 ID:wxBAgdgR] perl,phpの両スクリプトから書き込みがあるファイルがあるんだが、 mkdirとかにしといた方が無難かね? それぞれでflock()したって排他かからない?
727 名前:nobodyさん mailto:sage [04/10/21 19:24:18 ID:???] 実装言語がどれでも中では flock(2) を呼ぶわけだし flock() で問題ないんじゃない?
728 名前:nobodyさん mailto:sage [04/10/21 23:27:35 ID:???] >>727 デマ飛ばすな。ボケッ man perlfunc flock FILEHANDLE,OPERATION Calls flock(2), or an emulation of it, on FILEHANDLE.Returns true for success, false on failure. Produces a fatal error if used on a machine that doesn't implement flock(2), fcntl(2) locking, or lockf(3). flock is Perl's portable file locking interface, although it locks only entire files, not records.
729 名前:nobodyさん [04/10/22 01:27:00 ID:W+TTmfbF] >>727 なるほど、結局perl,phpのflock()が同じシステムコールを使うかどうかって所ですかね? linux(redhat)なんですが、普通にflock(2)使ってると思って良いのかなぁ。
730 名前:nobodyさん mailto: [04/10/22 17:20:32 ID:???] 通常、perlのflock()もphpのflock()も、下位レベルで使ってるシステムコールはflock(2)なわけだが。
731 名前:nobodyさん mailto:sage [04/10/23 01:59:39 ID:???] 言語, OS, ファイルシステム等の実装に依存 php4.3.9/linux はソース確認したところ flock(2) 使ってないよ。fcntl(2)。
732 名前:nobodyさん mailto:sage [04/10/23 02:53:34 ID:???] perl5.8/linuxはflock(2)だっけ?fcntl(2)だったっけ?
733 名前:nobodyさん mailto:sage [04/10/23 04:34:45 ID:???] ごめん、phpでもflock(2)使ってた. -->731は間違い 双方とも flock(2) が使える環境では flock が使われる. また間違ってるかも知れないので、調べたソースを書いておく。 php-4.3.9 ./ext/standard/flock_compat.c perl-5.8.5 ./pp_sys.c
734 名前:nobodyさん mailto:sage [04/10/23 13:22:56 ID:???] おお、すばらしい。 flock(2)使える環境って前提になるが(BSD,SystemV,Linux?)、PerlでもPHPでもflock()でいけるのか。 NFS上のディスクは別として。
735 名前:nobodyさん mailto:sage [04/10/25 18:24:04 ID:???] なるほどねぇ
736 名前:nobodyさん mailto: [04/10/25 19:07:12 ID:???] lockアゲ
737 名前:nobodyさん [04/11/06 19:49:00 ID:em3fuQlS]
738 名前:nobodyさん mailto:sage [04/11/06 19:58:00 ID:???] flock最強神話
739 名前:nobodyさん mailto:sage [04/11/07 05:49:26 ID:???] RDBMSで行ロック最強
740 名前:nobodyさん mailto:sage [04/11/07 23:08:21 ID:???] 結局、KENTのmkdirやsymlink、初心者のよく使うflock、どこかでみたrename、格付けするとどうなの?
741 名前:nobodyさん mailto:sage [04/11/08 00:05:16 ID:???] >>740 格付けなんて意味ないのでは?適材適所でしょ。
742 名前:nobodyさん mailto:sage [04/11/08 00:10:15 ID:???] >>740 flockを使う奴は素人だといいたいのか〜(w
743 名前:nobodyさん mailto:sage [04/11/08 00:30:26 ID:???] >>740 KENTは素人じゃないといいたいのか〜(w
744 名前:nobodyさん [04/11/08 13:12:26 ID:BIj8xOyZ] 最終兵器ロックオン・レーザー搭載! 「一度捕まえたら、離さない・・・・・」 TAITOの名作シューティングRAY・FORCEができるのは セガサターンだけ!
745 名前:740 mailto:sagePerl歴4ヵ月PHP歴28日 [04/11/08 21:24:24 ID:???] いや…そういう訳じゃ…
746 名前:nobodyさん mailto:sage [04/11/08 23:46:08 ID:???] cmpxchg最強
747 名前:nobodyさん mailto:sage [04/11/09 03:55:57 ID:???] >>744 レイヤーセクションじゃなかったっけ?
748 名前:nobodyさん mailto:sage [04/11/09 07:25:54 ID:???] >>740 flock>>>>>越えられない壁>>>>>rename=symlink>>mkdir
749 名前:nobodyさん mailto:sage [04/11/09 08:59:34 ID:???] flockはNFS介して使うと壊れるから糞
750 名前:nobodyさん mailto:sage [04/11/09 13:16:33 ID:???] 激しくループしてるな。
751 名前:nobodyさん mailto:sage [04/11/09 13:43:34 ID:???] ネタがファイルロックだけだから進展しようが無い
752 名前:nobodyさん mailto:sage [04/11/09 20:07:15 ID:???] >>749 NFSを使った事無いので、良く分からないので教えてください。 NFSを利用する時はflock関数にflock(2)ではなくfcntl(2)を利用するように perlをビルドすると思いますが、それでもロックは壊れるのでしょうか。 fcntl(2)で壊れる場合、実際の解決手段として、どのようなものがあるのでしょうか。
753 名前:nobodyさん mailto:sage [04/11/10 00:42:16 ID:???] >>752 Maildir
754 名前:nobodyさん mailto:sage [04/11/10 01:28:10 ID:???] >>753 djb 厨ってホントにいつも頭使わずに発言するなあ。
755 名前:nobodyさん mailto:sage [04/11/10 21:25:46 ID:???] >>753 それは、ロック機構が無くても信頼できるメールボックスの話だと思うのですが、 一般的なファイルアクセスにも使えるのでしょうか。
756 名前:nobodyさん [04/11/12 07:07:11 ID:djvAfFkI] >>747 レイフォース >>>> 越えられない壁 >>>> レイヤーセクション
757 名前:752 mailto:sage [04/11/13 13:06:05 ID:???] 調べてみたところ、 ・NFS Version4なら、ロック機構が組み込まれているので問題が無い(flock(2)でok?) ・NLM(Network Lock Manager)プロトコルに対応したサーバとクライアントならば、 fcntl(2)で対応可能。(ただし、一部のシステムで信頼が無いかも) ・それ以外はロックファイルを作るのが一般的 という感じらしいことが分かりました。 ありがとうございました。
758 名前:nobodyさん [04/11/13 15:51:42 ID:6imth/Ie] >756 レイストーム >>> レイフォース >>> レイクライシス
759 名前:nobodyさん mailto:sage [04/11/14 12:08:06 ID:???] レイフォース=ガンロック >> php >> perl >> レイヤーセクション >> レイストーム / レイクライシス
760 名前:nobodyさん mailto:sage [04/11/15 01:32:31 ID:???] なんか、SIMPLE1500のTHEダブルシューティングが欲しくなってきたw
761 名前:nobodyさん [04/11/18 09:27:07 ID:upfr9/ei] >>760 それなに?
762 名前:nobodyさん [04/11/18 10:10:24 ID:3NzX+MnA] 俺もレイ・フォースは好きだったな 懐かしい
763 名前:nobodyさん [04/11/18 19:52:46 ID:GLzLqJbZ] >>762 同意。
764 名前:nobodyさん mailto:sage [04/11/18 20:49:35 ID:???] おめーらロックすんぞ
765 名前:nobodyさん [04/11/27 15:36:14 ID:o5xdYnQz] ファイルロックって読み込むときは必要無いの?
766 名前:nobodyさん mailto:sage [04/11/27 15:54:59 ID:???] ロックするべ?
767 名前:nobodyさん mailto:sage [04/11/27 17:40:53 ID:???] >>765 書き込みが行われず中身が固定のファイルなら不要
768 名前:nobodyさん mailto:sage [04/12/04 12:35:02 ID:???] 質問しに来たらすでに同じ質問してる人がいた。 >>765-767 サンクス 過去ログは見るもんだ。
769 名前:nobodyさん mailto:sage [04/12/04 19:37:01 ID:???] それは過去ログって言わないけどな
770 名前:nobodyさん mailto:sage [04/12/20 07:41:20 ID:???] 追記モードのやつを読むときはいらないんじゃないの? 壊れてる可能性のあるところってバッティングしているときのだけでしょ?
771 名前:nobodyさん [04/12/20 14:13:21 ID:sskqg6P0] phpとperlでflock関数でファイルロックをしてますが 現在1つのスクリプト中に複数の箇所でファイルロックを使ってます。 これらのファイルロックを全てやめて代わりに、 スクリプトの一番最初でダミーのファイルにロックをかけて スクリプトの一番最後でロックを解除するようにして他のプロセスが スクリプトを実行しているときはスクリプトの実行自体を順番待ちさせて 同時に複数のプロセスがファイルへの書き込みをできないように 変えようと思いますが、何か問題あるでしょうか? 1つ気になるのは、もしスクリプトの途中でexit関数等でスクリプトの実行が終了した場合は 自動的にダミーファイルのロックが解除されファイルも自動的にcloseされますか?
772 名前:nobodyさん mailto:sage [04/12/20 15:14:56 ID:???] >>770 追記であろうがなかろうが書き込みはロックした上で行われるのなら 読み込みだけのときはロック不要。
773 名前:nobodyさん mailto:sage [04/12/20 15:30:20 ID:???] >>771 プロセスが死ねばロックは解除される。 先頭と末尾でロックと解除をするようにするのはいいが、 パフォーマンス低下は明らか。
774 名前:nobodyさん mailto:sage [04/12/20 16:09:04 ID:???] mod_perl や mod_php のときって スクリプトの実行が終了してもプロセスは死なないと思うけど mod_* がスクリプト中の flock の後始末を面倒見てくれるんですよね?
775 名前:nobodyさん mailto:sage [04/12/20 20:09:18 ID:???] >>770 二つ以上のプロセスが同時に追記したら、データが混じる可能性があるし。 >>772 勧告ロックはそうはいかない。 >>774 PHPは面倒みてくれるけど、mod_perlのファイルハンドルは無理。 だから、IO::File,FileHandleモジュールなどを使う。 perl.apache.org/docs/1.0/guide/porting.html#Filehandlers_and_locks_leakages
776 名前:770 mailto:sage [04/12/20 21:19:18 ID:???] >>772 ロックしなくて読んでいいのは、追記モードのときだけではないの? 上書きモードだと一旦中身が空になるわけで、そのときロックしないで 読んでしまったらだめだよね? 読み込んで、それをそのまま出力しておしまいな 2ch の read.cgi みたいなやつならそういうアプローチもいいだろうけど、読んだデータ を処理に利用する場合はだめと思う。 >>775 >>770 のやつ 「書込時にちゃんとロックする前提で」っていうのが抜けてた。スマソ
777 名前:771 [04/12/20 21:25:49 ID:sskqg6P0] >>773 回答ありがとうございます。 やっぱパフォーマンスの問題になりますか…
778 名前:nobodyさん mailto:sage [04/12/20 21:25:58 ID:???] >>776 ロックして書き込み中は読み込もうとしてもアクセスできないだろ。
779 名前:nobodyさん mailto:sage [04/12/20 22:28:54 ID:???] >>776 追記モードでも、書き込み途中の中途半端なデータを読む可能性を考えればダメでは?
780 名前:nobodyさん mailto:sage [04/12/20 23:16:39 ID:???] >>778 なこたぁない。。 >>779 そだね けちろん: 読み込みデータがハンパでもいいタイプのシステムなら ロックは無用。読み込みデータがその後のデータに関わってくるのなら ロック白
781 名前:nobodyさん mailto:sage [04/12/20 23:47:40 ID:???] >>778 ロックの掛け方による >>779 例えば固定長なら書込み途中のデータを見分けて使わない機構とかできそうな予感がするな? >>780 そのけつろんは読みの場合限定ってことで
782 名前:nobodyさん mailto:sage [04/12/21 06:25:34 ID:???] >>778 アドバイザリロックはいくらでもロックを無視できる。
783 名前: [05/02/02 14:16:34 ID:hfbAK0ph]
784 名前:nobodyさん mailto:sage [05/02/26 07:20:55 ID:???] ロック状態を保持するデーモン作る
785 名前:nobodyさん [2005/03/27(日) 21:58:07 ID:frr01O3q] それ最強
786 名前:nobodyさん [2005/03/28(月) 02:50:20 ID:QWQNdIyl] ユーザ名とロックIDを引数にしてロック状態の設定、解除、状態取得を行えるCGIサービスを誰かやって! もちろん無料で( ̄ε ̄@)」 lock.service.jp/lock.cgi&user=xxx?id=1?timeout=60 lock.service.jp/status.cgi&user=xxx?id=1 # <html><body>OK</body></html> # <html><body>NG</body></html> lock.service.jp/unlock.cgi&user=xxx?id=1 こんな奴
787 名前:nobodyさん mailto:sage [2005/03/28(月) 03:17:29 ID:???] >>786 実在のドメインを例示に使うなと何度(ry
788 名前:nobodyさん mailto:sage [2005/03/28(月) 03:50:52 ID:???] ( ̄ε ̄@)
789 名前:nobodyさん [2005/03/30(水) 16:45:20 ID:0SN1W7SJ] 二つ以上のファイルをflockしても問題ないんですか? flock(FH, 2); flock(FH2, 2);
790 名前:nobodyさん mailto:sage [2005/03/30(水) 17:17:26 ID:???] >>789 ないよ。 # デッドロックには気を付けてね。
791 名前:nobodyさん mailto:sage [2005/03/30(水) 18:55:15 ID:???] To: lock@xxxx.xx.xx Subject: Lock user=xxxx pass=xxxx timeout=60 lock-id=1 ========== Subject: Unlock ========== Subject: Status こんな感じのメールでロック状態を管理してくれるサービスきぼんw
792 名前:nobodyさん mailto:sage [2005/03/30(水) 19:01:47 ID:???] 伝書鳩 (ry
793 名前:nobodyさん mailto:sage [2005/03/31(木) 04:46:07 ID:???] >>792 それだ! To: lock@xxxx.xx.xx Subject: Lock user=xxxx pass=xxxx timeout=60 lock-id=1 ======= ↓ 登録してある住所にlock-id確認コードを郵送 ↓ 登録ページからlock-id確認コードを入力
794 名前:789 mailto:sage [2005/03/31(木) 09:19:53 ID:???] thnx>>790
795 名前:nobodyさん mailto:sage [2005/04/02(土) 05:31:48 ID:???] rename $0 $0.tmp perl $0.tmp rename $0.tmp $0
796 名前:nobodyさん [2005/04/04(月) 15:59:12 ID:UmDaQFM/] >>795 すげw