この記事には参考文献や外部リンクの一覧が含まれていますが、脚注によって参照されておらず、情報源が不明瞭です。脚注を導入して、記事の信頼性向上にご協力ください。(2019年1月)
標準ストリーム(入力、出力、エラー出力)
標準ストリーム(英: standard streams)とは、UNIXやUnix系オペレーティングシステム (OS) において、プログラムの活動実体であるプロセスとその実行環境(通常は端末)の間の接続として、(プロセスから見ると)あらかじめ確立されている入出力チャネル(パイプ)である。OSのカーネルではなくシェルで実装されている機能だが、広く使われているため標準化されている。UNIXやUnix系OSでは3つの入出力ストリーム(標準入力、標準出力、標準エラー出力)が定義される。
一部のプログラミング言語の実装では、UNIXやUnix系以外のシステムでもUnixと同様の使い勝手を提供するよう、これらを模倣するものがある。MS-DOSにはさらに、シリアルポートに対応する標準補助入出力 (stdaux)、プリンターに対応する標準プリンター出力 (stdprn) もあり、今でもWindowsでAUXやPRNという名前をファイルやコマンド等に使おうとすると問題を起こしたりするのは、これらに関してMS-DOSとの互換性があるためである。 UNIX以前の多くのOSでは、プログラムは明示的に適当な入出力に接続する必要があった。多くのシステムにはOS固有の複雑な事情があり、環境設定をしたり、ローカルなファイルテーブルにアクセスしたり、必要なデータセットを指定したり、カードリーダー、磁気テープドライブ、ディスクドライブ、ラインプリンタ、カードパンチ、対話型端末などを正しく扱うといったプログラミング以前のハードルが多数存在した。 UNIXはこの状況に対していくつかの重要な進化を遂げている。その1つが「抽象デバイス(英: abstract device)」である。これはプログラム自体がやり取りするデバイスに関する知識を持たなくて済むようにしたものである。古いOSではプログラマはレコード構造を知っておく必要があり、直交性のないことが多いデータ意味論やデバイス制御を扱う必要があった。UNIXはデータストリームという概念によってこのような複雑さを排除した。データストリームとは逐次的なデータバイト列であり、End Of Fileまでリード可能である。プログラムはまた好きなだけバイト列を出力でき、事前にバイト数を宣言しておく必要もないし、それらがどのようにグループ化されているかを宣言する必要もない。 もう1つのUNIXの成し遂げたブレークスルーは、自動的に入力と出力を関連付けることであり、典型的な入力-処理-出力型プログラムでは入出力の設定を何もする必要がない。対照的にそれ以前のOSでは複雑なジョブ制御言語を使ってコネクションを確立するか、それとほぼ同等のことをプログラム本体で行う必要があった。 UNIXが標準ストリームを提供したことで、そのC言語実行環境もそれをサポートするようになった。結果として、多くのC言語実行環境(および派生言語の実行環境)はOSが何であっても同等な機能を提供するようになっている。 標準入力(英: standard input, stdin)はプログラムに入ってくるデータ(テキストであることが多い)である。プログラムは read 操作を使ってデータ転送を要求する。全てのプログラムが入力を要求するわけではない。例えばdirやlsプログラム(ディレクトリ内のファイル名の一覧を表示する)は、標準入力からのデータを使わないで処理を行う。 リダイレクトしない限り、標準入力はプログラムを起動した端末のキーボードになっている。 標準入力のファイル記述子は0(ゼロ)である。POSIXの <unistd.h> では STDIN_FILENO と定義されている。対応する <stdio.h> での変数は FILE* stdin、<iostream> での変数は std::cin である。 標準出力(英: standard output, stdout)はプログラムが書き出すデータのストリームである。プログラムは write 操作を使ってデータ転送を要求する。全てのプログラムが出力を要求するわけではない。例えばファイル改名コマンド(mv、move、ren など)は何も出力しない。 このストリームのデフォルト宛先はプログラムを起動した端末のディスプレイになっている。リダイレクトにより容易に宛先を変更できる。 標準出力のファイル記述子は1である。POSIXの<unistd.h>ではSTDOUT_FILENOと定義されている。対応する<stdio.h>での変数はFILE* stdout、<iostream>での変数はstd::coutである。 標準エラー出力(英: standard error, stderr)は、エラーメッセージや診断メッセージを出力するためのもう1つの出力ストリームである。標準出力とは独立しているため、一方だけをリダイレクトすることができる。デフォルトでは端末(のディスプレイ)になっており、標準出力がリダイレクトされていて画面に表示されなくとも、エラーメッセージだけはユーザーが目にするようになっている。
背景
標準入力 (stdin)
標準出力 (stdout)
標準エラー出力 (stderr)
Size:17 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef