6

accept() を使用してソケットを作成し、fdopen() を使用してソケットから FILE を作成する場合、すべてをクリーンアップするにはどうすればよいですか? FILE に対して fclose() を実行する必要がありますか? ソケットに対して shutdown() および close() を実行する必要がありますか? それとも shutdown() および/または close() または fclose() のみを実行する必要がありますか? fclose() を実行しない場合、手動で FILE ポインターを free() する必要がありますか?

4

3 に答える 3

5

男 fdopen から:

ファイル記述子は複製されず、 fdopen() によって作成されたストリームが閉じられると閉じられます

したがって、基になるファイル記述子も閉じる fclose() を使用します。shutdown() が必要かどうかもわかりません。

于 2008-09-20T12:48:51.597 に答える
3

http://opengroup.org/onlinepubs/007908775/xsh/fclose.htmlから

fclose() 関数は、stream が指すストリームに関連付けられたファイル記述子に対して close() を実行します。

ソケットをストリームでラップした場合、少なくとも最初にストリームをフラッシュしない限り、shutdown() は意味をなさないでしょう。しかし、close() だけでなく shutdown() を使用する用途がないことを知らないため、それを誓うことはありません。

于 2008-09-20T12:53:58.200 に答える
-1

クリーンアップする必要があるものが 2 つあります。 で表されるストリームFILEと、ソケットで表されるファイル記述子です。最初にストリームを閉じてから、ファイル記述子を閉じる必要があります。fclose()したがって、一般に、FILEオブジェクト、次にclose()ファイル記述子が必要になります。

個人的にはshutdown()自分で片付けたい時に使ったことがないのでなんとも言えません。

編集

fdclose()他の人は、基になるファイル記述子も閉じることを正しく指摘しています.closeファイル記述子を呼び出すclose()とエラーが発生するため、この場合はfdclose().

于 2008-09-20T12:44:59.577 に答える