FreeBSD初心者運用日記 このページをアンテナに追加

 | 

2009-02-28

[]書き込み用のファイルそのものをロックする場合、fopenのwモードで開いてはいけない 22:02 書き込み用のファイルそのものをロックする場合、fopenのwモードで開いてはいけない - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - 書き込み用のファイルそのものをロックする場合、fopenのwモードで開いてはいけない - FreeBSD初心者運用日記 書き込み用のファイルそのものをロックする場合、fopenのwモードで開いてはいけない - FreeBSD初心者運用日記 のブックマークコメント

fopenをwモードで開くと、ファイルが初期化されて0バイトになる。

この後にflockをしても遅い。

(ロック専用のロックファイルをfopenのwモードで開くのは問題ない。)

[]編集したファイルをfcloseする前にどこかのサーバに転送したい場合 21:57 編集したファイルをfcloseする前にどこかのサーバに転送したい場合 - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - 編集したファイルをfcloseする前にどこかのサーバに転送したい場合 - FreeBSD初心者運用日記 編集したファイルをfcloseする前にどこかのサーバに転送したい場合 - FreeBSD初心者運用日記 のブックマークコメント

fcloseする前に、編集したファイルをリモートサーバに転送したい場合は、転送する前にfflushを実行し、出力バッファをフラッシュしておく必要がある。

[][]ロックについて 21:46 ロックについて - FreeBSD初心者運用日記 を含むブックマーク はてなブックマーク - ロックについて - FreeBSD初心者運用日記 ロックについて - FreeBSD初心者運用日記 のブックマークコメント

  • ロックの種類
    • アドバイザリロック・・紳士協定みたいなもので、ロックを正しく行っていないプロセスがひとつでも存在すると、他のプロセスが行っているロックの意味はなくなる。ちなみにphpflockはアドバイザリロック方式。
    • 強制ロック・・調査中(BSD/Linuxは実装されているが、その他のUNIX系の実装はあてにならないらしい)
  • ロックの種類その2
    • 共有ロック(書き込みをロックする)
    • 排他ロック(読み書き両方をロックする)
  • 共有ロックが必要なケースについて
    • ファイルの内容が途中で更新されたら困るような処理を行う場合、処理の最初から最後まで共有ロックを行う必要がある。
  • 排他ロックが必要なケースについて
    • 書き込みする場合は排他ロックが必要です。同じ場所を複数のプロセスが書き換えるようでは整合性が保てないから。あと、カウンタなどのように複数のプロセスが同時に読みこんでほしくないファイルの場合も排他ロックが必要です。
  • 共有ロックすら必要ないケースについて
    • 書き込まないファイル
    • ファイルの既存領域を読む場合で且つ追記しかされないファイル

■疑問(ToDo)

  • リモートサーバからファイルをscpで取得し、そのファイルを読み込んで何かを処理する。というようなプログラムがあったとして、「scpを取得」の部分はファイルをロックしておく必要があるんだろうか、、。共有ロックすら必要ないケースとして書き込まないファイルが該当するが、「scpを取得」してファイルを置き換えるのは「ファイルを書き込む」ことに相当するんだろうか。。?
  • 複数のファイルをロックする場合に、ファイル毎にロックするべきなのか?それとも、処理に対して1つのロックファイルを用意したほうがよいのか?
 |