0

ファイルへの同時アクセスを備えた Linux ANSI C cgi-bin サーバー プログラムを作成しています。

  1. ファイルの存在とファイルのロックを区別することは可能ですか? Google で答えを見つけることができません。fd<0 の場合 (ファイルがしばらくロックされていると考えて)、数秒間ファイルを開こうとするプログラムを書きたいと思います。ただし、ファイルが存在しない場合は、fd も <0 です。そのため、プログラムは待ち時間を無駄にします。

  2. いくつかのスレッドがロックなしで同じファイルに追加しようとしたとします。1つは「AAAA」を追加しようとし、もう1つは「BBBB」を追加しようとします。結果ファイルが「AABBAABB」のようになることはありますか? それとも、常に AAAABBBB や BBBBAAAA のようになりますか? それとも結果は予測不可能ですか?

4

1 に答える 1

0

IEEE Std 1003.1-2001 が ISO C 標準に従う可能性があると想定しています...

fopen が失敗した場合、つまり fd < 0 の場合、システムはいくつかのエラー コードを設定します...それらのエラー コードを確認できます。ファイルが存在しない場合、返されるエラーは次のようになります。

ENOENT filename のコンポーネントが既存のファイルを指定していないか、filename が空の文字列です。

詳細については、http: //pubs.opengroup.org/onlinepubs/009695399/functions/fopen.htmlを参照してください。

ポイント2の場合:私は、100を超えるプロセスを単一ファイルに同時に書き込むことで、システム内の特定のデータのログを実行していますが、レコードの合併を見たことがありません(ファイルは常に追加モードで開かれます)。つまり、常にaaaabbbbのようなものです

于 2013-02-12T04:55:12.820 に答える