【Perl】ファイルロック(排他処理)について語ろう
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/06/23 10:18ID:eY2l+Gw10268nobodyさん
02/08/11 21:39ID:???俺は断言してないよ、忙しかったしよって感じ
0269nobodyさん
02/08/14 01:12ID:???排他処理とはちょっとズレるかもしれないが、これは立派にシステム上に矛盾が起きてるんだから、"バグ"ではないにしろ、立派な不具合だよな…
この不具合って、そんなに難しいことなのかな…
あたりまえのように、こういうのは想定しないかな?
Kentのスクリプトって、こういうところが馬鹿だよね。
0270nobodyさん
02/08/14 01:45ID:7AoVgCGeこのまとめてロックっていいんですか?
0271nobodyさん
02/08/14 02:02ID:???,一-、
/ ̄ l | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
■■-っ < んな こたーない
´∀`/ \__________
__/|Y/\.
Ё|__ | / |
| У.. |
0272nobodyさん
02/08/14 02:05ID:7AoVgCGe0273nobodyさん
02/08/14 02:14ID:7AoVgCGe0274nobodyさん
02/08/14 04:31ID:???0275nobodyさん
02/08/14 20:00ID:DbQN4DsP0276nobodyさん
02/09/14 03:01ID:???0277nobodyさん
02/10/01 08:47ID:OVvB7u9F強力なロックだ
0279名無しさん@お腹いっぱい。
02/10/01 16:34ID:???漏れは開きすぎちゃったよ。windows再起動した。
皆気をつけろよ。中のどれか開いたりしたら、国際電話だぞ。
0280名無しさん@お腹いっぱい。
02/10/04 08:00ID:???心ある人は、rubyスレにお礼参りしてください。
0282nobodyさん
02/10/11 23:24ID:0pBUR/gh0284nobodyさん
02/10/15 14:15ID:???2chの負荷でロックなんかしたら使い物にならん
壊れてたら読み直せばすむことだし
0285nobodyさん
02/10/15 18:19ID:jOp8uFKz0286nobodyさん
02/10/16 11:23ID:???一時ファイルを作って書き込み終わったら
subject.txtにリネーム
renameのアトミック性に頼ってるわけだな
datはふつうにflockしてるだけ
0287nobodyさん
02/10/22 13:32ID:???ロック機能作る。
理論的 このスクリプト完璧。
でも どうテストする。
アルバイト100人雇う。
100人いっせいにアクセスする。
そんな 手間かけられない。 どうする。
2ちゃんねるに晒す。 それ怖い。 どうする。
0291nobodyさん
02/10/27 19:23ID:zFNcoqUs別人ですが、読み込んだものを加工してまた書き込む場合には
読み込むときにもロックが必要なんですね?
単に読み込んで、例えば表示したいだけで
加工もしない場合は必要ないんですよね。
0292nobodyさん
02/10/27 21:19ID:???0293nobodyさん
02/10/27 22:41ID:???そうすりゃ一人でもテストできるだろ。
0295nobodyさん
02/10/29 01:24ID:3RRgraL5flock(XX, 2)
書込中だから書込読込ロック、あとから来たら待つ。
とあるのですが、待つってどのくらい待つことが出来るのでしょう…?
上限や目安みたいなものはあるのでしょうか?
実行者が我慢できなくなってkillするまで、ずっと待つよ。
で、それじゃこまるからってんでブロックしないモードがある。
use Fcntl qw(:flock);
flock FH, LOCK_EX | LOCK_NB or die "ロック失敗:$!";
0298nobodyさん
02/10/29 09:56ID:???ブロックして待ったほうがましだが
0299nobodyさん
02/11/03 16:56ID:???rename を使った完璧なファイルロックが完成してしまいました。
0300nobodyさん
02/11/03 18:41ID:???0301nobodyさん
02/11/05 18:35ID:5Ci8Aq1y0302perlお勉強ちゅー
02/11/29 01:12ID:vd7dmowTこんな感じかな、
my($process)=$$;
open (IN,"data.txt");
flock (IN,2);
open (OUT,">$process.tmp");
flock (OUT,2);
#hogehoge処理
close (IN);
close (OUT);
rename ("$process.tmp","data.txt");
不安なんですけど、これで良いのでしょうか?皆様。
0303perlお勉強ちゅー
02/11/29 01:54ID:???0304私も勉強中
02/11/29 17:19ID:???から
rename ("$process.tmp","data.txt");
までの間に、他のプロセスが open (OUT,">$process.tmp") を
実行してしまい、$process.tmpが空になる可能性がある。
※open (OUT,">$process.tmp")した瞬間
$process.tmpのファイルサイズが0になるので、
次の flock (OUT,2) で止めても手後れ。
そんな気がするが、どうだろうか。
0305304
02/11/29 17:25ID:???tmpファイルの名前を毎回変えれば大丈夫か。
0306nobodyさん
02/11/29 19:16ID:???普通に、だめだね。
たとえば、Aプロセスがclose(OUT)まで行く、その直後にBプロセスが
open (IN,"data.txt");、でそのあとAプロセスがrename、Bプロセスは
普通に終了するけど、BのINは、Aが変更を加える前のdata.txtなので
Bがrenameした時点で、Aで加えた変更は破棄される。
0307perlお勉強ちゅー
02/11/30 00:18ID:???ご解説して下さってありがとうございます。
close しなければ rename できないと勝手に
思い込んでいました。(やってみたらできました)
close したときに flock が解除されるのなら
rename 後に close しとけば別プロセスに割り
込まれることが減り、少しはましになるかな。
0308nobodyさん
02/11/30 15:54ID:???> rename 後に close
だめ。 AプロセスがINをopen、直後にBがINをopen、Aがflockして処理を
おえる、Bがflockを獲得して処理を終える。これでも、BのINはAが変更を
加える前のdata.txtなので、同様にAの変更が破棄される。
なおかつ、Win環境だとopen中のファイルのrenameはできなかったような?
0309私も勉強中
02/11/30 16:23ID:???flock(LOCK,2);
open (IN,"data.txt");
open (OUT,"date.tmp");
#hogehoge処理
close (IN);
close (OUT);
rename ("date.tmp","data.txt");
close (LOCK);
INの前にflockするという方向で考えると、こうなるのか?
renameを使ったファイルロックと言っていいのかどうか分からないが。
0311perlお勉強ちゅー
02/12/01 14:43ID:???またもやありがとうございます。
rename 後の close を Windows2000 で試したところ、
ご指摘のとおりエラーになりました。
open してから flock するまでに間が空くのがいけないと思い、
今度はフラグを立てるタイプを考えてみましたが、
フラグが立ってるか判別するまでに間が空く・・・
私には解決が難しいので人のソースでもっと勉強してみます。
0312cron
02/12/02 11:25ID:YojCbNB7Perlでロックしていてもcronでroot権限でrenameしてしまえるみたいなんだけど
Perlで複数のユーザーがどんどん書き加えていくファイルを何分か置きに
root権限で実行したい場合 問題の起こらない良い方法はありますか?
0314cron
02/12/02 13:01ID:YojCbNB7そのコマンドのオプションはCGIで書き込ませたいのです。
0315nobodyさん
02/12/02 14:26ID:Vw2f1Ru9ネタだよなぁぁぁぁ、頼むからネタだと言ってくれー
0316cron
02/12/02 15:25ID:YojCbNB70317☆☆☆☆☆
02/12/02 15:47ID:Z6bI7Cqn0318nobodyさん
02/12/02 22:12ID:???オプティミスティック
オプティミスティック
ペシミスティック
ペシミスティック
ペシミスティック
あー、言いにくい
0319nobodyさん
02/12/06 00:00ID:???あのさあ、rootって管理人のことだろ?
どこの鯖缶が赤の他人にroot権限使わせるってのよ。
やるんなら自鯖立ててやんなよ。
0320Perlお勉強ちゅー
02/12/06 01:16ID:???ファイルの排他処理のキーワードらしいとわかってきました。(つもり)
フラグにするものがアトミックというのは、例えれば、
一組のトランプからはクラブの 1 は 1 枚しか引けないからこそ
目印になるということかな。親元になければ誰もカードを取れないものね。
気になったのは、アトミックがいくつかの使われ方をしている事で、
1 : 現在の ファイル I/O では HDD への読み書きは物理的には一つしかできないことに依存してフラグを立てる。
(HDD の複数ヘッドがばらばらに動いてたらこわいです。)
2 : Perl 上で処理全体をアトミックにと言う場合は、「読み」「処理」「書き」を
「1」に依存して、他人(他プロセス)に口をはさませずに行う。
・・・って感じかな。
# 見当違いでしたらつつしんで怒られます。とほ。
# お勉強中途報告でスマソ。
0321cron
02/12/08 07:08ID:tHo7Ijtwroot権限で当然、自サバでするんだよ
cronのことしらないの?
0322nobodyさん
02/12/08 08:24ID:???cronで動かすプログラムとWebプログラムでのファイルのロックが問題なの?
普通のファイルロックと同じようにやればいいじゃん。
0323319
02/12/08 11:44ID:???自鯖でやるなんて一言も言わなかったじゃないか。
そもそも、自分が鯖缶だとも言ってない。
cronでCGI動かすようにすれば? んで、CGIの方でロックをきちんとすればいい。
0324nobodyさん
02/12/08 11:44ID:???0326nobodyさん
02/12/08 12:11ID:???0327nobodyさん
02/12/08 16:05ID:???> Perlで複数のユーザーがどんどん書き加えていくファイルを何分か置きに
> root権限で実行したい場合 問題の起こらない良い方法はありますか?
「複数のユーザが書き換えるファイル」を「root権限で実行」する馬鹿が本当にいると思ってるのか?
0328山崎渉
03/01/15 13:42ID:???0329nobodyさん
03/01/17 10:53ID:t5G3aPWpとかよくやりますが
close(ABC);
閉じるときも
close(ABC) || &error("error");
とやるべきでしょうか?
closeに失敗することあるんでしょうか?
0330nobodyさん
03/01/17 12:29ID:+SxK8G04非常にいい質問だね。
さ、誰か答えてやんなさい。
0331nobodyさん
03/01/17 13:58ID:???0332nobodyさん
03/01/18 00:49ID:???それがどうファイルロックと関係あるのかと
0333nobodyさん
03/01/18 14:04ID:???処理が終了されて、ロック解除できずロックファイルが残る場合。
0334nobodyさん
03/01/18 17:36ID:???どうして上手くいっているのだろうか?
0339世直し一揆
03/01/30 10:23ID:EZ4VgkoJるな!)
●とにかく気が小さい(神経質、臆病、二言目には「世間」、了見が狭い)
●他人に異常に干渉し、しかも好戦的・ファイト満々(キモイ、自己中心)
●自尊心が異常に強く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようと
する(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際に
はたいてい、内面的・実質的に負けている)
●本音は、ものすごく幼稚で倫理意識が異常に低い(人にばれさえしなければOK)
●「常識、常識」と口うるさいが、実はA型の常識はピントがズレまくっている(日本
の常識は世界の非常識)
●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者に弱く
、弱い者には強い)
●あら探しだけは名人級(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす)
●基本的に悲観主義でマイナス思考に支配されているため性格がうっとうしい(根暗)
●一人では何もできない(群れでしか行動できないヘタレ)
●少数派の異質、異文化を排斥する(差別主義者、狭量)
●集団によるいじめのパイオニア&天才(陰湿&陰険)
●悪口、陰口が大好き(A型が3人寄れば他人の悪口、裏表が激しい)
●他人からどう見られているか、人の目を異常に気にする(「世間体命」、「〜みたい
」とよく言う)
●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度
も言ってキモイ)
●表面上意気投合しているようでも、腹は各自バラバラで融通が利かず、頑固(本当は
個性・アク強い)
●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う)
●自ら好んでストイックな生活をし、ストレスを溜めておきながら、他人に猛烈に嫉妬
する(不合理な馬鹿)
●執念深く、粘着でしつこい(「一生恨みます」タイプ)
●自分に甘く他人に厳しい(自分のことは棚に上げてまず他人を責める。しかも冷酷)
●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(例:「俺のほうが男
前やのに、なんでや!(あの野郎の足を引っ張ってやる!!)」)
0340nobodyさん
03/01/30 12:26ID:RKDiglA0壊れるという現象が頻発して困ります。
なにか他のいい方法を探しているのですが
書き込み待ちテンプを作るやり方があると聞いたのですが
教えてください。
0342nobodyさん
03/01/31 04:05ID:QdG4FrQHどのようにロックかけるのがのぞましいのでしょうか?
0343nobodyさん
03/01/31 07:27ID:K4VaGHSu0344nobodyさん
03/01/31 20:55ID:???0345nobodyさん
03/02/01 03:10ID:6WMjWs0+∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚)< みんなで視姦汁!
./ | \________
.______(___/_____
.|03. 2. 2. / AHE |
.|________________|
/\ \
/ \ 2003年2月2日 \
/ Λ_Λ \ .13:00… \
/__( ´д`)_\______________\
| |ゲ.| │ |
| |.ロ | │ 梅田丸ビルの .|
| |ゲ.| │ 電光掲示板に… .|
| |.ロ | │ ..『(゚д゚)ウマー』 |
|γ__ |ゲ.| │ ̄\ / ̄|
| \ |.ロ | │ \_________/ |
| |ゲ.| │ │
|____|__||_|)|.ロ | │ コ ッ プ 1 杯 .│
|□━□ ) │ . ( 約 200ml ) で |
| J |) / ̄ ̄ |. 1 日 分 の * .|
| ∀ ノ < ヒヒヒヒヒ | 黄色ブドウ状球菌 |
| - ′ . \____ | 2 分 の 1 |
| ) │ │
|/. 製 造 ..| │
| . 逝印大阪工場 . | 500 ml |
|____________________|______________|
http://life2.2ch.net/test/read.cgi/offreg/1043075025/l50
0346nobodyさん
03/02/01 03:23ID:???0347nobodyさん
03/02/19 23:23ID:???0348山崎渉
03/03/13 17:22ID:???0350nobodyさん
03/03/22 18:02ID:???0351nobodyさん
03/04/17 00:56ID:s+I4ylgdhttp://www.din.or.jp/~ohzaki/perl.htm#File_Lock
を使おうと思ったんですが、
なにげにperl初心者なんで、その使い方がわかりません。
perlメモには、
$lfh = my_flock() or die 'Busy!';
# アンロックする
my_funlock($lfh);
$lfh にはなにをいれれればいいのでしょう?ファイル名?ファイルハンドル?
0352nobodyさん
03/04/17 02:26ID:???0353山崎渉
03/04/17 11:58ID:???0354351
03/04/17 22:16ID:PczzXVDVどういうこと?
0355佐々木健介
03/04/17 22:16ID:???/_ |
/. \ ̄ ̄ ̄ ̄|
/ / ― ― |
| / - - |
||| (5 > |
| | | ┏━┓| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | | ┃─┃| < こんなサイトを見つけた
|| | | | \ ┃ ┃/ \ 正直、スマンカッタ
| || | |  ̄ \_________
http://freeweb2.kakiko.com/tama/
0357bloom
03/04/17 22:56ID:ahUYqmP+0358nobodyさん
03/04/17 22:57ID:???0359あぼーん
03/04/17 23:23ID:???http://www.japan.pinkserver.com/yamazaki/saitama/hankaku06.html
http://www.japan.pinkserver.com/yamazaki/saitama/hankaku05.html
http://www.japan.pinkserver.com/yamazaki/saitama/hankaku03.html
http://www.japan.pinkserver.com/yamazaki/saitama/hankaku04.html
http://www.japan.pinkserver.com/yamazaki/saitama/hankaku01.html
http://www.japan.pinkserver.com/yamazaki/saitama/hankaku02.html
http://www.japan.pinkserver.com/yamazaki/saitama/hankaku09.html
http://www.japan.pinkserver.com/yamazaki/saitama/hankaku10.html
http://www.japan.pinkserver.com/yamazaki/saitama/hankaku07.html
http://www.japan.pinkserver.com/yamazaki/saitama/hankaku08.html
0361nobodyさん
03/04/19 13:00ID:EJZQKwDzに載ってる「ファイルを上書きする場合」(↓)
open(OUT, "+< $datafile"); # 読み書きモードで開く
flock(OUT, 2); # ロック確認。ロック
seek(OUT, 0, 0); # ファイルポインタを先頭にセット
print OUT "$data\n"; # 書き込む
truncate(OUT, tell(OUT)); # ファイルサイズを書き込んだサイズにする
close(OUT); # closeすれば自動でロック解除
を参考にして、
「(1)ファイルの中身(データ)を読み込んで、読み込んだデータを加工して、
(3)再度同じファイルにデータを格納する場合」を考えたんだけど、
↓で特に問題ないでしょうか?
$datafile = "data.txt";
open(OUT, "+< $datafile"); # 読み書きモードで開く
flock(OUT, 2); # ロック確認。ロック
@Array_data = <OUT>; # ★追加:(1)ファイルの中身を読み込んで
foreach $values (@Array_data){
#@Array_dataをいろいろ加工; # ★追加:(2)読み込んだデータを加工
chomp $values;
$values = $values * 2;
push (@New_Array_data,"$values\n");
}
seek(OUT, 0, 0); # ファイルポインタを先頭にセット
print OUT @New_Array_data; # ●変更:(3)再度同じファイルにデータを格納
truncate(OUT, tell(OUT)); # ファイルサイズを書き込んだサイズにする
close(OUT); # closeすれば自動でロック解除
0363nobodyさん
03/04/19 19:05ID:???この最中に逝っちゃっても大丈夫?
0365山崎渉
03/04/20 06:00ID:???( ^^ )< ぬるぽ(^^)
0366:
03/04/21 18:06ID:J93Hac+3http://sagatoku.fc2web.com/
あなたの探し物きっとみつかるよ☆^〜^★
■ このスレッドは過去ログ倉庫に格納されています