[表示 : 全て 最新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]
どんな環境でも使えて、軽くて、頑丈なロックを考えようじゃありません

232 名前:193 [02/08/01 19:06 ID:W9oFKOXJ]
>>194
だから〜。
処理ロックのファイルロックは当然かけておいて、
書き込み時はユニークファイル名に書き出してrename
ってこったよ。

233 名前:nobodyさん mailto:sage [02/08/02 01:01 ID:???]
>>232
アマちゃんですね。

234 名前:nobodyさん mailto:sage [02/08/03 18:57 ID:???]
www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&as_qdr=all&q=site%3A2ch.net+perl&lr=
>>1-233
この調子でがんばれ糞ども

235 名前:228 [02/08/03 20:27 ID:npWjw1lc]
230さま
たまにログファイルが途中でぶち切れちゃうんです
ファイルアップありだから
でかいファイルをアップロードした時に
途中でタイムアウトするのかと思ったんですが
そうでもないんですね・・・

open(DB,"+<$logdir$log_d") || &error('ファイルエラー error_24');
flock(DB, 2);
my @lines=<DB>;
unshift (@lines,$thred);
seek(DB, 0, 0);
print DB @lines;
truncate(DB, tell(DB));
close (DB);

これ問題ないですよね?
なんでだろ・・・
flock使えない鯖なんでしょうか?
他に原因は考えられます?

236 名前:nobodyさん mailto:sage [02/08/03 23:45 ID:???]
>>235
でかいファイルを全部配列に入れるのは大問題だ

237 名前:228 [02/08/04 07:59 ID:xc+iopog]
>236
50件ずつにログを区切ってるんで
読み込んでるのは
書き込み50件分のデータです
スレッドのタイトル一覧も表示しないといけないし・・・

238 名前:228 [02/08/04 08:03 ID:xc+iopog]
やっぱ
flockが使えないんでしょうか?
それかtell(DB)の値がおかしくなることがあるのかな?

239 名前:nobodyさん mailto:sage [02/08/04 12:11 ID:???]
>>235
> seek(DB, 0, 0);
> print DB @lines;
> truncate(DB, tell(DB));

先頭にseekした後に、truncate(FH, tell(FH)) したら当然ファイルサイズ0に
なるわけだが。

240 名前:230 mailto:sage [02/08/04 12:57 ID:???]
データが大きくないとしても、my @lines=<DB>が失敗してるのかも。
my @lines=<DB> or &error('読み込みエラー');
としてみては?
読み込んだ大きなファイルの方にメモリを食われてるのかもしれず。
システムコール(ここではファイル操作)は常に失敗の可能性を考えて
おいたほうがいいかと。flockやprintもね。



241 名前:nobodyさん mailto:sage [02/08/04 13:14 ID:???]
>>235
もうちょっと問題切り分けた方が良いよ
マルチパートだと思うんだけど、変なモジュールを使って
データ千切れちゃってるとか。
Niftyはflock空振りサーバの代名詞だけど大丈夫?
適当にsleepしてウェイトかけながらテストするとか
シグナル関係全部無視するとか
基本的に共用ならサーバからkillされる様な使い方は
間違ってると思うよ
もし自分のなら、さっさとコネクション切ってじっくりと作業すれば
良いだけなんだけど
サーバのBBSとかFAQは読んでる?

>>239
それは print 〜 が有るから問題無い
と言う事で、一応。

242 名前:239 mailto:sage [02/08/04 14:38 ID:???]
>>241 正直、スマンカッタ。

243 名前:nobodyさん mailto:sage [02/08/04 15:21 ID:???]
で、なにが最強なの?

244 名前:228 [02/08/04 21:59 ID:etatASlj]
レスありがとうございます
最初から書いとくべきだったんですが
説明を付け足すと
2chタイプの掲示板なんです
でログファイルへの書き込みはこの部分だけです
カウンターなんかも同じ方法で書き込みしてるんですが
それは飛んだことないんです
で、ログファイルへの書き込みが処理の最後の方なので
遅い回線でファイルアップした時にデータを送るのに
時間がかかり途中でCGIが止まる事があるのかな?
と考えてたのです(最後の方の処理のログファイルが影響受けやすいと)

でも、どういう条件でログが消えるのかは特定できてません
スレッド50件記録のうちの途中(全部じゃないです。例えば36件目とか)で
消えてしまいます(メッセージが途中までしかなかったり)・・・
(レスは別ファイルなのですが、そっちは消えません)

>読み込んだ大きなファイルの方にメモリを食われてるのかもしれず。
そういう制限もあるんですね試してみます
>もうちょっと問題切り分けた方が良いよ
でも、書き込みしてるのこの部分だけなんですよ
やっぱflockが使えなくて
他のプロセスの書き込み中のデータを読み込んでるとログが途中で消えますよね?
でも、カウンターは消えないんですよ・・・
(それともそのうち消えるんでしょうか?ファイルサイズが小さいから確率が低いだけ?)
>サーバのBBSとかFAQは読んでる?
すいません、その辺、勉強してきます

245 名前:nobodyさん mailto:sage [02/08/04 22:48 ID:???]
>>244
一度flock以外のロックで試してみれば?
こういうのが問題を切り分けるって事じゃないのか。

246 名前:230 mailto:sage [02/08/05 01:30 ID:???]
データのどこで切れるかが重要。

1.flockが利かない場合は、まるっと新規発言が記録されないか、書
き込みの後のtruncateで半端な位置で切られるわけで、それぞれの
発言内容の量にさほど違いが無いなら、48〜50発言目くらいの後ろ
の方で切れるはず。

2.新規発言の処理に問題あるなら、unshiftで入れた1発言目(あとで
気が付いたなら数発言目)で切れるが、その後ろの発言まで消える事
は無い。

3.書き込みが全面的に失敗し、書き込まれて無いのに切り詰めれば
ログ丸ごと消える。(ずっとあとになって気が付けば36発言目になっ
てたりするが)

というわけで、36発言目で切れるなら問題は
1.読み込み(my @lines=<DB>)
2.書き込み(print DB @lines)
3.切り詰め(truncate(DB, tell(DB)))
の3個のどれかが失敗してると考えられるよね。それぞれ失敗時には
エラーにしないと。で、これらが失敗する原因は、メモリ使用量や
ディスク容量の制限、あるいはサーバの混雑にありそう。

途中まで書き込んでprintが失敗してるんなら、tempファイル式にす
るしか無いけど、まずは上記の対策してから。

247 名前:228 [02/08/06 00:52 ID:eY1Nkha6]
my @lines=<DB> || &error('読み込みエラー');
にしたら
最初の一行しか読まないんですが・・
すいません・・・

248 名前:nobodyさん mailto:sage [02/08/06 01:13 ID:???]
評価順位って知ってる?
(@lines=<DB>)
その他力本願ぶりじゃ先は真っ暗っぽいね

249 名前:228 [02/08/06 01:14 ID:HdiBMgeW]
or にしたら
ちゃんと動きました
or と || とは違うんですか?
はぁ・・

250 名前:228 [02/08/06 01:29 ID:AoKqt/pr]
おお、わかりました
ありがとうございます



251 名前:nobodyさん mailto:sage [02/08/06 06:51 ID:???]
>>248
ハァーーーーーーーー


眠たい

252 名前:  mailto:  [02/08/06 09:00 ID:???]
>>251
何が眠たいんだ? 
my (@lines=<DB>) || &error('読み込みエラー');
で動いてるんだが、向学の為に教えて欲しい

253 名前: ◆JAPH9PWA mailto:sage [02/08/06 09:12 ID:???]
>>249
orは||より優先度がずっと低いんだよ。
だから
@lines = <DB> or error;

(@lines = <DB>) or error;
と評価され、
@lines = <DB> || error;

@lines = (<DB> || error);
と評価される。
||演算子のオペランドはスカラコンテキストで評価されるから、
結果として一行しか読み込まれないことになる、というわけね。

>>252
< my(@lines = <DB>)
> (my(@lines) = <DB>)


254 名前:  mailto:age [02/08/06 15:22 ID:???]
>>253
優先度を云々するのなら、= と || および = と or について言わないと意味ナイだろ。

255 名前: ◆JAPH9PWA mailto:sage [02/08/07 10:19 ID:???]
>>254
そういえばそうだ。肝心な所が抜けててごめん。

>>253 追記
とりあえず、代入演算子は比較的優先順位が低くなってるんだよ。
例えば、算術演算子や比較演算子などは全て代入演算子より優先度が高い。
だからこそ
$foo = 100 + 200; という式が
($foo = 100) + 200; ではなく、$foo = (100 + 200);と評価される。
で、||や&&といった演算子は代入演算子よりも優先順位が高いため、
加算演算子と同様の評価順序になるってわけ。
しかしながら、orやandといった演算子の優先順位は代入演算子のそれより低いので、
このケースの場合は期待通りに動くわけだね。

詳細についてはついてはperldoc perlopを参照のこと。

256 名前: ◆JAPH9PWA mailto:sage [02/08/07 10:21 ID:???]
ていうかここはファイルロックスレじゃないか!
スレ違いもいいとこだね。とほほ…

257 名前:228 mailto:sage [02/08/10 00:33 ID:???]
おかげであれからログが消えてません
open(LOG,"+<$log") || &error('ファイルエラー');
flock(LOG, 2) or &error('ロックエラー');
my @lines = <LOG> or &error('読み込みエラー');
〜〜〜更新処理〜〜〜
seek(LOG, 0, 0);
print LOG @lines;
truncate(LOG, tell(LOG));
close (LOG);
こんな感じです
やっぱり同時刻に書き込みが集中した時に消えるようなので
KENT式mkdirロックを少し改造したものをあわせて使ってます
そのまま使うとエラーでロックを外した瞬間に書き込みが重なってしまうようなので・・・
ありがとうございました

258 名前:230 mailto:sage [02/08/10 06:54 ID:???]
>>257
>そのまま使うとエラーでロックを外した瞬間に書き込みが重なってしまう

ロックを外したら、もはやそのプロセスは書き込まないはず。
まさか&errorでexitせずに、実行続けてるとか?

mkdir式が有効なのは、flockがダメだったからかもしれないが、
処理が遅くなるのとタイムアウトがある事で、読み書きが集中
しないようになった効果かもしれない。

質問者は問題が解決しさえすればいいんだが、
flockとmkdir式の併用なんて気持ちわるい結末だなぁ。

259 名前:228 mailto:sage [02/08/10 18:58 ID:???]
>ロックを外したら、もはやそのプロセスは書き込まないはず。
どんなエラーでもロックを外してしまうので
書き込み中の人がいて、それ以外の人がエラー出してロックを外してしまう
というのが問題でした
上で書いてるのはちょっと違いました。。

いろいろ教えて頂いたのに、はっきり原因を解明せずに
気持ち悪い結末にしてしまって申し訳ないですが
上のflockのみではprintで失敗したらどうしようもないのなら
mkdirを併用する方法はいいんじゃないかと思うんですが・・

260 名前:230 mailto:sage [02/08/10 22:16 ID:???]
>>259
書き込み中の人がいるとしたら、その人しかロックが成功していないので、
それ以外の人がロックを外す事はありえないのが排他制御。
mkdir式の場合、ロック成功したプロセスがエラーで外すなら問題ないわけ。
通常、ロックを成功してないプロセスがロックを外すようなのはバグ。
flockの場合はロックかけたプロセス以外は外せないよ。

> printで失敗したらどうしようもない
mkdirを併用しても同じ状況だけど。
print LOG @lines or &error('書き込みエラー');
でOK。truncateする前にやめればデータは壊れない。

とにかく、mkdir式にするならflockは必要ないので消そうよ。



261 名前:nobodyさん mailto:age [02/08/11 12:39 ID:???]
結局KENTかよ!!!

262 名前:nobodyさん mailto:sage [02/08/11 12:53 ID:???]
flock使えるならflockにしとけよ!!!

263 名前:nobodyさん mailto:sage [02/08/11 13:45 ID:???]
flockよりKENTが優れていることが証明されました!!!

264 名前:nobodyさん mailto:sage [02/08/11 13:46 ID:???]
どこで?

265 名前:KENT mailto:sage [02/08/11 15:40 ID:???]
flockってカエルだよね?

266 名前:  mailto:sage [02/08/11 15:50 ID:???]
おはロックが有効な鯖ってあるの?

267 名前:nobodyさん mailto:sage [02/08/11 19:41 ID:???]
>>228
だから初めにflock効いてるのか調べてと言ってるのに
空振りしてるんだよ、それ
他のファイル編集部分は時間的にロック無しでも動いてるだけだよ多分

268 名前:nobodyさん mailto:sage [02/08/11 21:39 ID:???]
「多分」って便利な言葉
俺は断言してないよ、忙しかったしよって感じ

269 名前:nobodyさん mailto:age [02/08/14 01:12 ID:???]
www.kent-web.com/support/wforum.cgi?mode=allread&no=3986&page=0

排他処理とはちょっとズレるかもしれないが、これは立派にシステム上に矛盾が起きてるんだから、"バグ"ではないにしろ、立派な不具合だよな…
この不具合って、そんなに難しいことなのかな…
あたりまえのように、こういうのは想定しないかな?
Kentのスクリプトって、こういうところが馬鹿だよね。


270 名前:nobodyさん [02/08/14 01:45 ID:7AoVgCGe]
homepage1.nifty.com/glass/tom_neko/web/web_04.html#lockall
このまとめてロックっていいんですか?



271 名前:nobodyさん mailto:age [02/08/14 02:02 ID:???]
>>270
      ,一-、
     / ̄ l |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ■■-っ < んな こたーない
    ´∀`/    \__________
   __/|Y/\.
 Ё|__ | /  |
     | У..  |

272 名前:nobodyさん [02/08/14 02:05 ID:7AoVgCGe]
やっぱだめなんですか

273 名前:nobodyさん [02/08/14 02:14 ID:7AoVgCGe]
他にいい方法はありませんか?


274 名前:nobodyさん mailto:sage [02/08/14 04:31 ID:???]
ヅラを強力ロック

275 名前:nobodyさん [02/08/14 20:00 ID:DbQN4DsP]
監獄ロック

276 名前:nobodyさん mailto:sage [02/09/14 03:01 ID:???]
慎吾ママの

277 名前:nobodyさん [02/10/01 08:47 ID:OVvB7u9F]
kagino110.hp.infoseek.co.jp/sub18.htm
強力なロックだ

278 名前:nobodyさん mailto:sage [02/10/01 14:48 ID:???]
>>277
ううむ、強力すぎてアクセスさえもできないよ!

279 名前:名無しさん@お腹いっぱい。 mailto:sage [02/10/01 16:34 ID:???]
>>278
漏れは開きすぎちゃったよ。windows再起動した。
皆気をつけろよ。中のどれか開いたりしたら、国際電話だぞ。



280 名前:名無しさん@お腹いっぱい。 mailto:sage [02/10/04 08:00 ID:???]
ム板の「Perlについての質問箱」がruby基地外によって潰されました。
心ある人は、rubyスレにお礼参りしてください。




281 名前:nobodyさん mailto:sage [02/10/08 18:16 ID:???]
>>277
ちょっとワラタ

282 名前:nobodyさん [02/10/11 23:24 ID:0pBUR/gh]
read.cgiのファイルロック。これ最強

283 名前:nobodyさん mailto:sage [02/10/12 00:02 ID:???]
>>282
どういうロックやってるの? 知らないから教えてくれ。

284 名前:nobodyさん mailto:sage [02/10/15 14:15 ID:???]
ロックなんかしてないよ
2chの負荷でロックなんかしたら使い物にならん
壊れてたら読み直せばすむことだし

285 名前:nobodyさん [02/10/15 18:19 ID:jOp8uFKz]
bbs.cgiはどうやってるの?

286 名前:nobodyさん mailto:sage [02/10/16 11:23 ID:???]
日時とスレッドキーなんかを含めたファイル名で
一時ファイルを作って書き込み終わったら
subject.txtにリネーム
renameのアトミック性に頼ってるわけだな
datはふつうにflockしてるだけ

287 名前:nobodyさん mailto:  [02/10/22 13:32 ID:???]
わたし 思う。
ロック機能作る。
理論的 このスクリプト完璧。
でも どうテストする。
アルバイト100人雇う。
100人いっせいにアクセスする。
そんな 手間かけられない。 どうする。
2ちゃんねるに晒す。 それ怖い。 どうする。

288 名前: mailto:sage [02/10/22 16:25 ID:???]

・ 実験しないで本番に使う。
・ 覚悟して晒す。
・ 一年生になって友達100人つくる。


289 名前:nobodyさん mailto:sage [02/10/22 16:39 ID:???]
>>287
不覚藁

290 名前:nobodyさん mailto:sage [02/10/22 17:09 ID:???]
>>287
100 スレッド立ててアクセスしまくるにきまっとろーが。



291 名前:nobodyさん [02/10/27 19:23 ID:zFNcoqUs]
>>185
別人ですが、読み込んだものを加工してまた書き込む場合には
読み込むときにもロックが必要なんですね?
単に読み込んで、例えば表示したいだけで
加工もしない場合は必要ないんですよね。

292 名前:nobodyさん mailto:sage [02/10/27 21:19 ID:???]
ログ更新中に読み出したらおかしな内容になってしまう。ロックは必要。

293 名前:nobodyさん mailto:sage [02/10/27 22:41 ID:???]
テストスクリプトはlock握って数十秒眠るようにするわけだ。勿論タイムアウト値の調整は必要だ。
そうすりゃ一人でもテストできるだろ。

294 名前:nobodyさん mailto:sage [02/10/28 01:48 ID:???]
>>292
表示がおかしかったら読み直してもらうという
アプローチもありうる(read.cgiとか)。

295 名前:nobodyさん [02/10/29 01:24 ID:3RRgraL5]
flockについて、説明として例えば

flock(XX, 2)
書込中だから書込読込ロック、あとから来たら待つ。

とあるのですが、待つってどのくらい待つことが出来るのでしょう…?
上限や目安みたいなものはあるのでしょうか?

296 名前:nobodyさん mailto:sage [02/10/29 01:40 ID:???]
>>295
めっちゃ、待つでぇ

297 名前: ◆hMJAPH9PWA mailto:sage [02/10/29 09:26 ID:???]
>>295
実行者が我慢できなくなってkillするまで、ずっと待つよ。
で、それじゃこまるからってんでブロックしないモードがある。

use Fcntl qw(:flock);

flock FH, LOCK_EX | LOCK_NB or die "ロック失敗:$!";

298 名前:nobodyさん mailto:sage [02/10/29 09:56 ID:???]
もっともブロックしないで無限ループするくらいなら
ブロックして待ったほうがましだが

299 名前:nobodyさん mailto:age [02/11/03 16:56 ID:???]
大事件発生!

rename を使った完璧なファイルロックが完成してしまいました。

300 名前:nobodyさん mailto:sage [02/11/03 18:41 ID:???]
外出です



301 名前:nobodyさん [02/11/05 18:35 ID:5Ci8Aq1y]
んむ・・・。

302 名前:perlお勉強ちゅー [02/11/29 01:12 ID:vd7dmowT]
>>299
こんな感じかな、

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");

不安なんですけど、これで良いのでしょうか?皆様。


303 名前:perlお勉強ちゅー mailto:sage [02/11/29 01:54 ID:???]
↑ open の戻り値チェックしてなかった。スマソ

304 名前:私も勉強中 mailto:sage [02/11/29 17:19 ID:???]
close (OUT);
から
rename ("$process.tmp","data.txt");
までの間に、他のプロセスが open (OUT,">$process.tmp") を
実行してしまい、$process.tmpが空になる可能性がある。

※open (OUT,">$process.tmp")した瞬間
$process.tmpのファイルサイズが0になるので、
次の flock (OUT,2) で止めても手後れ。

そんな気がするが、どうだろうか。

305 名前:304 mailto:sage [02/11/29 17:25 ID:???]
ごめん、間違えた。
tmpファイルの名前を毎回変えれば大丈夫か。

306 名前:nobodyさん mailto:sage [02/11/29 19:16 ID:???]
>>302
普通に、だめだね。
たとえば、Aプロセスがclose(OUT)まで行く、その直後にBプロセスが
open (IN,"data.txt");、でそのあとAプロセスがrename、Bプロセスは
普通に終了するけど、BのINは、Aが変更を加える前のdata.txtなので
Bがrenameした時点で、Aで加えた変更は破棄される。


307 名前:perlお勉強ちゅー mailto:sage [02/11/30 00:18 ID:???]
>>304 さん >>306 さん
ご解説して下さってありがとうございます。
close しなければ rename できないと勝手に
思い込んでいました。(やってみたらできました)
close したときに flock が解除されるのなら
rename 後に close しとけば別プロセスに割り
込まれることが減り、少しはましになるかな。


308 名前:nobodyさん mailto:sage [02/11/30 15:54 ID:???]
>>307
> rename 後に close
だめ。 AプロセスがINをopen、直後にBがINをopen、Aがflockして処理を
おえる、Bがflockを獲得して処理を終える。これでも、BのINはAが変更を
加える前のdata.txtなので、同様にAの変更が破棄される。

なおかつ、Win環境だとopen中のファイルのrenameはできなかったような?


309 名前:私も勉強中 mailto:sage [02/11/30 16:23 ID:???]
open (LOCK,"lock");
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を使ったファイルロックと言っていいのかどうか分からないが。

310 名前:nobodyさん mailto:sage   [02/12/01 00:55 ID:???]
>>309
flock は、とりあえず >>1 の条件に反するので0点ってとこかな?



311 名前:perlお勉強ちゅー mailto:sage [02/12/01 14:43 ID:???]
>>308
またもやありがとうございます。
rename 後の close を Windows2000 で試したところ、
ご指摘のとおりエラーになりました。

open してから flock するまでに間が空くのがいけないと思い、
今度はフラグを立てるタイプを考えてみましたが、
フラグが立ってるか判別するまでに間が空く・・・
私には解決が難しいので人のソースでもっと勉強してみます。

312 名前:cron [02/12/02 11:25 ID:YojCbNB7]
ちょっと教えてほしいんだけど。。

Perlでロックしていてもcronでroot権限でrenameしてしまえるみたいなんだけど
Perlで複数のユーザーがどんどん書き加えていくファイルを何分か置きに
root権限で実行したい場合 問題の起こらない良い方法はありますか?

313 名前:nobodyさん mailto:sage [02/12/02 11:37 ID:???]
>>312
rootで何をしたいのか?

314 名前:cron [02/12/02 13:01 ID:YojCbNB7]
rootでしか実行できないコマンドを実行させるのに
そのコマンドのオプションはCGIで書き込ませたいのです。



315 名前:nobodyさん [02/12/02 14:26 ID:Vw2f1Ru9]
>>314
ネタだよなぁぁぁぁ、頼むからネタだと言ってくれー

316 名前:cron [02/12/02 15:25 ID:YojCbNB7]
なんで?おかしかった?ちゃんと教えてください

317 名前:☆☆☆☆☆ [02/12/02 15:47 ID:Z6bI7Cqn]
alink3.uic.to/user/ranran2.html

318 名前:nobodyさん mailto:sage [02/12/02 22:12 ID:???]
オプティミスティック
オプティミスティック
オプティミスティック
ペシミスティック
ペシミスティック
ペシミスティック

あー、言いにくい

319 名前:nobodyさん mailto:sage [02/12/06 00:00 ID:???]
>>316
あのさあ、rootって管理人のことだろ?
どこの鯖缶が赤の他人にroot権限使わせるってのよ。
やるんなら自鯖立ててやんなよ。

320 名前:Perlお勉強ちゅー mailto:sage [02/12/06 01:16 ID:???]
アトミックというのと、入出力の処理全体を包み込むというのが
ファイルの排他処理のキーワードらしいとわかってきました。(つもり)
フラグにするものがアトミックというのは、例えれば、
一組のトランプからはクラブの 1 は 1 枚しか引けないからこそ
目印になるということかな。親元になければ誰もカードを取れないものね。

気になったのは、アトミックがいくつかの使われ方をしている事で、
1 : 現在の ファイル I/O では HDD への読み書きは物理的には一つしかできないことに依存してフラグを立てる。
  (HDD の複数ヘッドがばらばらに動いてたらこわいです。)
2 : Perl 上で処理全体をアトミックにと言う場合は、「読み」「処理」「書き」を
   「1」に依存して、他人(他プロセス)に口をはさませずに行う。
・・・って感じかな。
# 見当違いでしたらつつしんで怒られます。とほ。
# お勉強中途報告でスマソ。



321 名前:cron [02/12/08 07:08 ID:tHo7Ijtw]
>>319
root権限で当然、自サバでするんだよ
cronのことしらないの?

322 名前:nobodyさん mailto:sage [02/12/08 08:24 ID:???]
>>321
cronで動かすプログラムとWebプログラムでのファイルのロックが問題なの?
普通のファイルロックと同じようにやればいいじゃん。

323 名前:319 mailto:sage [02/12/08 11:44 ID:???]
>>321
自鯖でやるなんて一言も言わなかったじゃないか。
そもそも、自分が鯖缶だとも言ってない。

cronでCGI動かすようにすれば? んで、CGIの方でロックをきちんとすればいい。

324 名前:nobodyさん mailto:sage   [02/12/08 11:44 ID:???]
やればいいじゃん。

325 名前:nobodyさん mailto:sage [02/12/08 12:07 ID:???]
>>323
cronでCGI動かすなんてアホな発想はどこから出てくるんだ?

326 名前:nobodyさん mailto:sage   [02/12/08 12:11 ID:???]
出てくるんだ?

327 名前:nobodyさん mailto:sage [02/12/08 16:05 ID:???]
お前らいいかげんにネタだと気付け。
> Perlで複数のユーザーがどんどん書き加えていくファイルを何分か置きに
> root権限で実行したい場合 問題の起こらない良い方法はありますか?
「複数のユーザが書き換えるファイル」を「root権限で実行」する馬鹿が本当にいると思ってるのか?

328 名前:山崎渉 mailto:(^^)sage [03/01/15 13:42 ID:???]
(^^)

329 名前:nobodyさん [03/01/17 10:53 ID:t5G3aPWp]
open(ABC "<$hoge") || &error("error");
とかよくやりますが
close(ABC);
閉じるときも
close(ABC) || &error("error");
とやるべきでしょうか?
closeに失敗することあるんでしょうか?

330 名前:nobodyさん [03/01/17 12:29 ID:+SxK8G04]
>>329
非常にいい質問だね。
さ、誰か答えてやんなさい。



331 名前:nobodyさん mailto:sage [03/01/17 13:58 ID:???]
while (!close(ABC)) {}

332 名前:nobodyさん mailto:sage [03/01/18 00:49 ID:???]
perl -e 'close(STDIN); close(STDIN) || die $!'
それがどうファイルロックと関係あるのかと






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

前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