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ランタイムのprintf
usesは、(使用するか類似FILE *stdout
していない限り)実質的に:、つまりファイル記述子#1のバッファリングされた出力と同等です。freopen
fdopen(1, "w")
通常、を実行するmy_program
と、ファイル記述子#1が端末に接続されます。を実行すると、プログラムの実行が開始される前にmy_program > file
、ファイル記述子#1がアタッチされます。したがって、に書き込むと、(変更しない限り)ファイル記述子#1に落書きされ、端末ではなくファイルに出力されます。file
printf
stdout
プログラムの外部では、バッファリングされたI/Oや独自のI/Oで何をするかについては何も気にしませんstdout
。