2013-05-07 10 views
24

"stdout"に書き込むプログラムはファイルに書き込みますか?スクリーン? stdoutに書き込むことが何を意味するのか分かりません。Cでstdoutに書き込むのはどういう意味ですか?

+1

それがファイルに書き込みを意味記述1. 'stdout'は、定数、変数名、誰もがあなたが持っていないので、使用しています何かのようです実際のFD番号が1であることを覚えておいてください。例えば、最初に書きましたが、FD 0だと思いました。:) – CivFan

答えて

41

これは、セッションのメイン出力デバイスに何かが出力されていることを意味します。ユーザーのコンソール、ttyセッション、ファイル、または誰が何を知っているか。そのデバイスは、プログラムの実行方法や場所によって異なります。次のコマンドは、標準出力デバイス(stdout)に書き込みます

...

これを行うための、本質的には、もうひとつの方法がある
printf("hello world\n"); 

...

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

でこの場合、stdoutは、アプリケーションのデフォルトの出力デバイスを表すFILEストリームへのポインタです。 stderrがAで、stdoutのように - また、あなたはstdoutと同じであってもよいし、ないかもしれないが、アプリケーションのための標準エラー出力デバイスに出力を送信することになる場合には

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

を使用することができますエラーメッセージのデフォルトの出力デバイスを表すFILEストリームへのポインタ。

+0

Cでstdoutに書き込むコマンドがありますか? stdoutへの簡単なprintf文の書き込みですか? write()でファイルに書き込むのはどうですか? – user2227422

+2

'printf'はデフォルトで' stdout'に書き込みます。特定のストリームに書きたい場合は、 'FILE * 'を宛先ストリームとして受け入れる' fprintf'を使うべきです。 – Jack

+1

私の編集を参照してください...うまくいけば、彼らはあなたのために明確にするのを助ける –

2

stdoutは、標準出力ストリームの略であり、オペレーティングシステムによってプログラムで使用できるストリームです。既にご利用のプログラムでは、最初からstdinstderrと一緒にご利用いただけます。

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

1

stdoutは標準出力ファイルストリームです。明らかに、それは最初のもので、出力へのデフォルトのポインタは画面ですが、望むようにファイルを指すことができます!

お読みください:

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

C++は、オブジェクト指向、しかし、Cと非常によく似ています。

9

によって異なります。

出力をstdoutに送信することをコミットすると、基本的に出力をどこに配置するかを決定するためにユーザーに委ねられます。

あなたがprintf(...)(または同等のfprintf(stdout, ...))を使用する場合

、あなたは stdoutに出力を送っているが、それが実際に終わるところ私はあなたのプログラムを呼び出す方法に依存することができます。コンソールには出力を生成しない、私はこのようなプログラムを起動するかもしれない、しかし

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

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

しかし、 "hello.txt"というファイルに "Hello、World!"というテキストが表示されるようになりました。内部では、シェルのリダイレクト機能のおかげです。

誰かが知っている - 私は他のデバイスを接続し、出力がそこに行く可能性があります。要するに、stdout(例えばprintf()を使用して)に印刷すると、プロセスの起動方法や使用方法がわかるまで、どこに行くか正確には分かりません。

0

@K Scott Pielはgreat answer hereを書きましたが、重要な点を1つ追加します。 stdoutストリームがため、出力を確保するために、usually line-bufferedであること

注意が実際に印刷されており、ちょうど書かれるのを待っているバッファに座って残っていないあなた\n

であなたの printfステートメントを終了いずれかによってバッファをフラッシュしなければなりません

例:

printf("hello world\n"); 

または

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

またはそれに類するもの、またはprintfコールの後にfflush(stdout);に電話する必要があります。

例:よりここ

printf("hello world"); 
fflush(stdout); 

読む:Why does printf not flush after the call unless a newline is in the format string?

関連する問題