fdopen()
を使用すると、既存のファイル記述子でストリームを開くことができます。しかし、ファイルを閉じるための適切な方法は、ストリームで開くとfclose()
FILE
ポインタになります。どのようにしてストリームを閉じることができますが、開いているファイル記述子は保持できますか?基礎となるファイル記述子を閉じずにFILEポインタを閉じる
この動作は、fflush()
を呼び出してからfileno()
を呼び出すのと似ていますが、閉じるときを除いてFILE
ポインタを再び使用することはありません。もう1つの懸念は、fdopen()
を再度実行すると、FILE
ポインタが複数あり、そのうちの1つのみを閉じることができるということです。
windowsおよびその他のプラットフォームはfileno()をサポートしています! 私はこのdup()解決策を考えていなかったとは思えません。非常にエレガントで明白です。 –
新しいfdを元のfdに戻してdup2()する必要はありませんか?ファイルストリームが閉じられていることを除いて、すべてが元の状態に戻ります。 :Dこれは、fclose()を実行する前にoldfd = fileno(stream)が必要であることを意味します。 –
ジョナサンは、マルチスレッドのアプリケーションでは手ごわいです。 fdを 'fdopen'に与える前に' dup'する方が良いので、あなたのオリジナルに触れることは絶対にありません。 – bdonlan