標準ストリーム
標準ストリーム(英: standard streams)とは、UNIXやUnix系オペレーティングシステム (OS) において、プログラムの活動実体であるプロセスとその実行環境(通常は端末)の間の接続として、(プロセスから見ると)あらかじめ確立されている入出力チャネル(パイプ)である。OSのカーネルではなくシェルで実装されている機能だが、広く使われているため標準化されている。UNIXやUnix系OSでは3つの入出力ストリーム(標準入力、標準出力、標準エラー出力)が定義される。
一部のプログラミング言語の実装では、UNIXやUnix系以外のシステムでもUnixと同様の使い勝手を提供するよう、これらを模倣するものがある。MS-DOSにはさらに、シリアルポートに対応する標準補助入出力 (stdaux)、プリンターに対応する標準プリンター出力 (stdprn) もあり、今でもWindowsでAUXやPRNという名前をファイルやコマンド等に使おうとすると問題を起こしたりするのは、これらに関してMS-DOSとの互換性があるためである。
標準出力(英: standard output, stdout)はプログラムが書き出すデータのストリームである。プログラムは write 操作を使ってデータ転送を要求する。全てのプログラムが出力を要求するわけではない。例えばファイル改名コマンド(mv、move、ren など)は何も出力しない。
このストリームのデフォルト宛先はプログラムを起動した端末のディスプレイになっている。リダイレクトにより容易に宛先を変更できる。
標準出力のファイル記述子は1である。POSIXの<unistd.h>ではSTDOUT_FILENOと定義されている。対応する<stdio.h>での変数はFILE* stdout、<iostream>での変数はstd::coutである。
標準エラー出力(英: standard error, stderr)は、エラーメッセージや診断メッセージを出力するためのもう1つの出力ストリームである。標準出力とは独立しているため、一方だけをリダイレクトすることができる。デフォルトでは端末(のディスプレイ)になっており、標準出力がリダイレクトされていて画面に表示されなくとも、エラーメッセージだけはユーザーが目にするようになっている。例えば、パイプで出力が他のプログラムの入力に接続されている場合でも、標準エラー出力は直接端末のディスプレイに届く。
標準出力と標準エラー出力を同じ出力先(端末など)にリダイレクトすることもよくある。バッファが関与しない場合、メッセージはプログラムが書いた順序で現れる。典型的な例として、標準エラー出力がバッファリングされておらず、標準出力が行単位でバッファリングされている場合、後から標準エラー出力に書かれたメッセージが先に端末上に表示されることがある(標準出力のバッファが満杯になっていない場合)。
標準エラー出力のファイル記述子は2である。POSIXの<unistd.h>ではSTDERR_FILENOと定義されている。対応する<stdio.h>での変数はFILE* stderr、<iostream>での変数は2つありstd::cerrとstd::clogである。前者はバッファリングされておらず、後者はC++の他のストリームと同様にバッファリングされている。