内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
•
oidc
•
s3
ruby:flock
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== ファイルの排他処理 ====== [[http://homepage1.nifty.com/glass/tom_neko/web/web_04.html|Perlの排他制御]]、openしてからflockするまでの間に他プロセスに書き込みされてしまうかもしれないよ?というレアケースにまで対応する排他処理のRuby版 <code ruby> # 追加書き込み File.open(filepath, "a") { |f| f.flock(File::LOCK_EX) f.seek(0, File::SEEK_END) f.write(data) } # 新規作成 File.open(filepath, "w+") { |f| f.flock(File::LOCK_EX) f.rewind f.write(data) f.truncate(f.tell) } # 上書き File.open(filepath, "r+") { |f| f.flock(File::LOCK_EX) f.rewind f.write(data) f.truncate(f.tell) } </code> ブロック付きのopenはclose処理をブロック実行後に行ってくれる。ファイル書き込み時などに例外が発生した場合でもcloseしてくれる(ほんとか?)。信用できなければ以下のコードで <code ruby> begin f = File.open(filepath, "r+") begin f.flock(File::LOCK_EX) f.rewind f.write(data) f.truncate(f.tell) ensure f.close end rescue # 例外処理コード end </code>
ruby/flock.txt
· 最終更新: 2007/10/02 17:14 by
127.0.0.1
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ