web-dev-qa-db-ja.com

Cでstdoutに書き込むとはどういう意味ですか?

「stdout」に書き込むプログラムはファイルに書き込みますか?スクリーン? stdoutに書き込むことの意味がわかりません。

31
user2227422

これは、セッションのメイン出力デバイスに出力を印刷していることを意味します。ユーザーのコンソール、ttyセッション、ファイル、または誰が何を知っているか。そのデバイスが何であるかは、プログラムの実行方法と場所によって異なります。

次のコマンドは、標準出力デバイス(stdout)に書き込みます...

printf( "hello world\n" );

これは、本質的にこれを行う別の方法です...

fprintf( stdout, "hello world\n" );

この場合、stdoutは、アプリケーションのデフォルトの出力デバイスを表すFILEストリームへのポインターです。また使用することができます

fprintf( stderr, "that didn't go well\n" );

この場合、アプリケーションの標準エラー出力デバイスに出力を送信します。これは、stdoutと同じ場合もそうでない場合もあります-stdoutstderrは、エラーメッセージのデフォルトの出力デバイスを表すFILEストリームへのポインターです。

49
K Scott Piel

場合によります。

stdoutへの出力の送信をコミットする場合、基本的には、出力をどこに送るかを決定するのはユーザーに任されています。

printf(...)(または同等のfprintf(stdout, ...))を使用する場合、出力をstdoutに送信しますが、実際にどこで終わるかは、どのように呼び出すかによって異なりますプログラム。

このようにコンソールからプログラムを起動すると、コンソールに出力が表示されます。

_$ prog
Hello, World! # <-- output is here on my console
_

ただし、このようなプログラムを起動して、コンソールに出力を生成しない場合があります。

_$ prog > hello.txt
_

しかし、「Hello、World!」というテキストを含むファイル「hello.txt」が作成されます。内部では、シェルのリダイレクト機能のおかげです。

誰が知っている-私は他のデバイスを接続することさえでき、出力はそこに行くことができます。ポイントは、stdoutに印刷することにした場合(たとえばprintf()を使用して)、プロセスの起動方法または使用方法を確認するまで、どこに移動するかを正確に知ることができないということです。 。

12
akivajgordon

stdout標準出力ストリームを表し、オペレーティングシステム自体がプログラムで使用できるストリームです。 stdinおよびstderrと共にプログラムは最初からすでに利用可能です。

それらが指す(または指す)ものは何でもかまいません。実際には、ストリームはプログラムにデータを送信または取得するためのインターフェースとして使用できるオブジェクトを提供するだけです。デフォルトでは、通常は端末ですが、ファイル、別のプロセスへのパイプなど、どこにでもリダイレクトできます。

2
Jack

stdoutは標準出力ファイルストリームです。明らかに、これが最初であり、出力へのデフォルトのポインターは画面ですが、必要に応じてファイルを指すことができます!

読んでください:

http://www.cplusplus.com/reference/cstdio/stdout/

C++はCに非常に似ていますが、オブジェクト指向です。

2
Alex Cutajar

stdoutは、UNIXの標準出力ストリームです。 http://www.gnu.org/software/libc/manual/html_node/Standard-Streams.html#Standard-Streams を参照してください。ターミナルで実行すると、ターミナルのstdoutに書き込まれたデータが表示され、選択したとおりにリダイレクトできます。

1
A.E. Drew

@K Scott Pielが ここでは素晴らしい答え を書いたが、一つ重要な点を付け加えたい。

stdoutストリームは 通常はラインバッファリング であるため、出力が実際に印刷され、書き込み待ちのバッファに残っているだけではないことに注意してくださいmustprintfステートメントを_\n_で終了することにより、バッファをフラッシュします

例:

_printf("hello world\n");
_

または

_printf("hello world"); 
printf("\n");
_

または同様に、OR printf呼び出しの後にfflush(stdout);を呼び出す必要があります。

例:

_printf("hello world"); 
fflush(stdout);
_

詳細はこちら: 改行がフォーマット文字列にない限り、printfが呼び出し後にフラッシュしないのはなぜですか?

0
Gabriel Staples