0

プログラムがあります。このプログラムでは、他の機器との http セッションを行っています。プログラムにはたくさんありprintfます。を閉じると、stdoutによってfclose(stdout)出力されたメッセージprintfが http セッションに送信されることに注意してください (メッセージは http パケットに含まれています)。

私はこの奇妙な振る舞いについて疑問に思っており、その振る舞いを回避する方法を疑問に思っていますか? 印刷されたメッセージの http セッションへのリダイレクトを回避する方法を意味しますか?

4

2 に答える 2

3

printfafter を呼び出すと、fclose(stdout)未定義の動作が呼び出されます。やらないでください。を禁止する必要がある場合はstdout、/dev/null を開いdup2て fd #1 に移動します。

于 2013-02-20T20:38:42.663 に答える
1

何が起こっているかというと、stdout で使用されているファイル記述子を閉じており、作成された次のファイル記述子 (この場合はソケット) は、従来それによって使用されていたファイル記述子 (FD 1) で終了しています。

stdout を閉じないでください。削除する必要がある場合は、を指すファイル記述子に置き換えます/dev/null。たとえば、次のようになります。

freopen("/dev/null", "w", stdout);
于 2013-02-20T20:37:08.890 に答える