使用するとecho 1234 >> some-file
、ドキュメントに出力が追加されると記載されています。
私の推測では、いくつかのファイルが存在しない場合、O_CREATは新しいファイルを作成します。もしを>
使用し、その後、O_TRUNCは、既存のファイルが切り捨てられます。
次の場合>>
:ファイルはO_WRONLY(またはO_RDWR)として開かれ、終了を求めてO_APPENDをシミュレートして書き込み操作が行われますか?または、ファイルがO_APPENDとして開かれ、追加を確実に行うためにカーネルに残されますか?
出力ファイルがNFSマウントポイントからのものである場合、コンサーバープロセスがエコーによって挿入されたいくつかのマーカーを上書きしているため、私はこれを求めています&NFSドキュメンテーションはO_APPENDがサーバーでサポートされていないため、クライアントカーネルがそれを処理する必要があると述べています。私はconserverプロセスがO_APPENDを使用していると思いますが>>
、Linux でbashが確実でないため、ここで質問します。
O_APPEND
は、サポートされていないということではありません。問題はエミュレートされていることです。ローカルファイルシステムでは、開いた同じファイルに書き込む複数のプロセスがO_APPEND
互いのデータを上書きすることはありません。NFSでは、O_APPEND
書き込み前に最後までシークすることでエミュレートされ、競合状態の可能性が残ります。NFSでこれを回避する方法はありません。各パラレルライターは、独自のファイルを書き込む必要があります。これを回避する唯一の方法は、NFSサーバー上でサーバープロセスをセットアップし、ロガーをにログ記録させ|nc server port
、サーバーに受信データをログに追加させることです。