4

Windows と Linux で動作するアプリケーションがあります。ファイルを作成して書き込み、fclose() を呼び出します。不確定な時間が経過すると、ファイルの名前が別のスレッドに送信されます。もう一方のスレッドは、fopen() を使用してファイルを開き、その内容を読み取ります。

1 人のユーザーが、ファイルを開く前に短い遅延を作成しない限り、Debian 6 でアプリケーションが失敗することを報告しています。

fclose() が呼び出されて戻ったとき、fopen() を介して他のスレッドがファイルを利用できるようになるまでの時間は?

4

2 に答える 2

3

あなたの質問は少しあいまいなので、いくつかの解釈に答えようとします。

あなたの質問がファイルに再びアクセスできるようになるまでfcloseの時間である場合、答えは単純にいつでも可能であるということです。POSIX では、ファイルを相互に排他的に開くことは許可されていません。システムのオープン ファイル制限に達しない限り、何度でもファイルを開くことができます。疑似 POSIX スレッドを実装した Windows のような非準拠のプラットフォームを使用している場合でも、が の後に注文されている限り、問題はありません。これは、基になるクローズ操作が戻る前に完了する必要があるためです。fopenfclosefopenfclosefclose

一方、あるスレッドによって書き込まれたデータを別のスレッドが読み取るために使用できるかどうかが問題である場合は、フラッシュ間の「前に発生する」関係を確立できる限り (明示的に、または操作fflushの一部として) fclose) データを書き込んで別の場所で読み取った場合、問題ありません。この関係を確立するには、mutex または の使用などの pthread 同期関数pthread_joinで十分です。

于 2013-06-14T01:43:39.710 に答える
-1

fclose() は libc によって提供されるため、実装はプラットフォーム/OS によって異なる可能性があり、fclose() が起動されて返された後にファイルの可用性を検出する方法があるかどうかは疑問です。おそらく、遅延のパラメーターを設定して、さまざまなクライアントに合わせて調整できます。

于 2013-06-13T18:26:27.477 に答える