stderrとstdoutをリダイレクトするパイプを設定しました。printfを使用すると、データがstdoutに送信されますか、それともストリーム1に送信されますか?
stdoutに送信する場合、代わりにストリーム1にデータを送信するように構成するにはどうすればよいですか?
stderrとstdoutをリダイレクトするパイプを設定しました。printfを使用すると、データがstdoutに送信されますか、それともストリーム1に送信されますか?
stdoutに送信する場合、代わりにストリーム1にデータを送信するように構成するにはどうすればよいですか?
printfを使用すると、データがstdoutに送信されますか、それともストリーム1に送信されますか?
このprintf関数はにデータを送信しますstdout。リダイレクトstdoutしたので、コンソール以外のファイルを指すようになりました。printfそれが何であるかを気にしない、それはそれができる限り書き続けるだけです。
stdoutに送信する場合、代わりにストリーム1にデータを送信するように構成するにはどうすればよいですか?
したがって、特別なことをする必要はありません。自動的に処理されます。
printfは常にデータをstdoutに送信します。パイプを使用してstdoutをリダイレクトした場合は、stdoutがパイプされているプロセスに移動します。
そして、ストリーム1(ファイル記述子1に関連付けられたストリームを意味すると仮定)は、本当に奇妙なことをしている場合(この場合は停止)を除いて、stdoutです。
関係するレイヤーについてのあなたの理解は少し間違っていると思います。
Cランタイムのprintfusesは、(使用するか類似FILE *stdoutしていない限り)実質的に:、つまりファイル記述子#1のバッファリングされた出力と同等です。freopenfdopen(1, "w")
通常、を実行するmy_programと、ファイル記述子#1が端末に接続されます。を実行すると、プログラムの実行が開始される前にmy_program > file、ファイル記述子#1がアタッチされます。したがって、に書き込むと、(変更しない限り)ファイル記述子#1に落書きされ、端末ではなくファイルに出力されます。file printfstdout
プログラムの外部では、バッファリングされたI/Oや独自のI/Oで何をするかについては何も気にしませんstdout。