2

いくつかのログを共通ファイルに書き込む必要があるいくつかの子プロセスがあります。プロセスが衝突なしで共通ファイルに書き込むように、このコードが機能するかどうか疑問に思っています。

sub appendLogs {
    open FILE, "+>>", $DMP or die "$!";
    flock FILE, LOCK_EX or die "$!";
    print FILE "xyz\n";
    close FILE;
}

そうでない場合は、どうすれば修正または改善できるか、ヒントを教えていただけますか?

4

3 に答える 3

4

ログを記録するために、車輪を再発明する代わりにLog4perlを使用します。それはあなたが探しているものをサポートしています。

于 2012-06-15T13:00:11.887 に答える
3

はい、ファイルに書き込もうとするすべてのプロセスが を使用している限り、flock衝突は発生しません。

于 2012-06-15T12:51:32.590 に答える
0

コードを移植可能にしたい場合は、ファイルハンドルをロックした後、書き込みを行う前に、ファイルの最後までシークする必要があります。の「メールボックス アペンダ」の例を参照してくださいperldoc -f flock。これは、実行していることと似ています。

sub appendLogs {
    open FILE, "+>>", $DMP or die "$!";
    flock FILE, LOCK_EX or die "$!";
    seek FILE, 0, 2;       # <--- after lock, move cursor to end of file
    print FILE "xyz\n";
    close FILE;
}

seekファイルハンドルを開いた後、ロックを取得する前に、別のプロセスがファイルを追加する (およびファイルの末尾の位置を移動する) 可能性があるため、これが必要になる場合があります。

于 2012-06-15T15:06:08.697 に答える