質疑応答罵詈雑言拡散不希望 byトat OPERATE2
質疑応答罵詈雑言拡散不希望 byト - 暇つぶし2ch500: ◆8bit.JzJJY (地震なし)
12/09/01 21:46:56.14 eFESUChQ0
>>422
> >>407さん
> その通りです。/mdに書き込むのにエラーが出ました。

>>407 の言うとおり moveはアトミックな処理じゃなくて
A->Bがそれぞれ別のファイルシステムにあるときには、 A->Bにコピーし、その後Aを消すという実装になっているようなんで、
コピー中に他の他のプロセスなどから同じファイルにたいして move() が実行されると、ファイルは壊れるわな。

perlの書き方は全く知らないんで、実例は挙げられないけれど、こんな感じにすればいいんじゃないかな。

1. A → B' にコピー B' は B とも、他のプロセスが作る可能性がある名前ともぶつからないファイル名にする。
2. B' → B に rename する。

ただ、ファイルシステムをまたがるのならば、元のファイルと移動先のファイルに rename or move を
使いたくなる状況っていうのが理解できないんだよね。
鯖落ちしたときに subject.txt が残るようにということであれば ssd / md 間で起こりうるのは
copy だけじゃないのかしら。

もし、 ssd でファイルを作って md に move し、 httpd に読ませるということをしようとしているのならば、
ファイル自体が壊れなくても、 md に move している間に httpd は中途半端なファイルを読むことになるんで
破たんしていると思う。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch