【ひょうじゅんすとりーむ】

標準ストリーム とは?

最終更新:
💡 プログラムの「受け取り口・結果の出口・お知らせの出口」

プログラムがデータを受け取る標準入力、結果を送る標準出力、エラーなどを伝える標準エラー出力という3つの入出力の流れ。接続先は画面やキーボードに限らず、ファイルなどへ切り替えられる。

📌 このページのポイント
標準ストリーム:入力と2つの出力 接続先をファイルにした例 📄 入力元 既存ファイル ⚙️ プログラム 入力を処理 stdin 標準入力 📄 エラーの保存先 例:エラー1行 📄 結果の保存先 例:結果2行 stdout 標準出力 stderr 標準エラー出力 どの流れに出すかはプログラム次第 画面・キーボードへの接続には固定されない
矢印は入力元からプログラムへ、プログラムから出力先へのデータの流れ。結果2行・エラー1行は説明用の例。標準出力と標準エラー出力は別の流れで、同じ画面にも別のファイルにも接続できる。
ひよこ ひよこ
ペンギン先生、標準入力ってキーボードのことなの?
ペンギン先生 ペンギン先生
キーボードそのものではなく、プログラムが入力を受け取る流れだよ。標準入力のstdin、結果を出すstdout、エラーなどを出すstderrをまとめて標準ストリームと呼ぶんだ。3つの窓口を思い浮かべるとわかりやすいね。
ひよこ ひよこ
結果とエラーって、どちらも画面に出るのに別なの?
ペンギン先生 ペンギン先生
同じ画面につながっていても、流れは別だよ。通常の結果とエラーメッセージを分けて出すプログラムなら、結果をファイルに保存しながらエラーだけ画面で確認できるんだ。
ひよこ ひよこ
入力をファイルから渡すこともできるの?
ペンギン先生 ペンギン先生
できるよ。Windowsのコマンドプロンプトなら「more < sample.txt」で、既存のsample.txtを標準入力へ渡せるんだ。「type sample.txt | more」のように、パイプで前のコマンドの出力を次へ渡す方法もあるよ。接続先が変わっても、moreは受け取った内容を表示するんだね。
ひよこ ひよこ
結果を保存したのに、エラーだけ画面に残ったことがあるよ。
ペンギン先生 ペンギン先生
コマンドプロンプトの「> result.txt」は標準出力を保存する指定だからだね。標準エラー出力も別に保存するなら「2> error.txt」を使うよ。たとえばstdoutに結果2行、stderrにエラー1行を出すプログラムなら、分けて保存すると結果は2行、エラーは1行になる。既存ファイルは上書きされるので、保存先に注意してね。
ひよこ ひよこ
「エラーの出口」があるなら、失敗は自動でそこに分けられるの?
ペンギン先生 ペンギン先生
実際にどちらへ書き出すかはプログラム次第だよ。窓口の名前だけで内容が自動分類されるわけではないんだ。うまく保存できないときは、どの流れに書かれているかと、どこへ接続しているかを分けて確認するとよいね。
もっと詳しく知りたい人へ

C言語のstdinやstdoutは、ファイルディスクリプタの番号なの?

番号そのものではありません。MicrosoftのCランタイムでは、stdin・stdout・stderrは標準ストリームを参照するポインターとして用意され、入出力関数へ渡して使います。対応する整数のファイルディスクリプタを得るには_filenoを使います。ストリームのポインターと、その識別番号を同じ値として扱わないようにします。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「標準ストリーム」って出てきたら「入力・結果・エラーを受け渡す3つの流れ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Standard Streams」 = 標準の入出力の流れ
💬 streamは「流れ」という意味で、ここではプログラムへ入るデータや外へ出るデータの流れを表しているんだよ。

参考資料

← 用語集にもどる