標準入出力

Unixでは、標準入力、標準出力というものが定義されていて、 プログラムで特にファイルを使う宣言をしなくても、入出力ができる。 MS-DOSでも同様である。 このしくみによって、 書きなおしたりコンパイルしなおしたりしなくても、 対話型処理と バックグラウンド処理 の両方に使えるプログラムを書くことができる。 Unixではこのほかに、 標準エラー出力というものもある。

対話型でプログラムを実行している場合、 あとで述べる入出力切りかえ(redirection)の指定をしなければ、 標準入力はキーボード、標準出力は端末画面に割り当てられている。 つまり、標準入出力を使ったプログラムは、 人がキーボードから入れた情報を読み、端末画面に結果を書く形で動作する。

標準入力を切りかえるには、

% program < infile
のように不等号記号を使う。 この例では、program というプログラム(コンパイルされた機械語プログラム またはシェルスクリプト) のなかで 標準入力から読むようになっているところで、 infileというファイルから読むことを示す (programinfileは 任意の名前の例として使った)。

標準出力を切りかえるには、

% program > outfile
のように不等号記号を使う。 この例では、program のなかで標準出力に書くようになっているところで、 outfile というファイルに書くことを示す。 すでにoutfileがあれば、上書きされ、前の情報は読めなくなる。 なお、
% program >> outfile
のように不等号を2つ続けた記号を使うと、 すでにoutfileがあった場合に、 その内容に追加して書くことになる。

% program < infile > outfile
のように、入出力両方のファイルを指定することもできる。

また、あるプログラムの標準出力を、ファイルに書きださずに 次のプログラムの標準入力として使う パイプライン処理というものもある。

プログラム言語での書き方

C

C言語の標準ライブラリ(ヘッダファイルはstdio.h)に、 scanf, printfのように、 標準入出力を使うことを前提とした入出力関数がいくつか用意されている。 また、ファイルを指定する入出力関数 fscanf, fprintfなどでは、 標準入力にはstdin、標準出力にはstdout というファイル変数を使えばよい。

Fortran

Fortranでは、 入出力装置を番号(整数の定数または変数)で指定し、 ファイル名との対応は、あらかじめOPEN文でつけておくのが 原則である。 ただし、標準入出力については、番号のかわりに、星印「*」を使い、 OPEN文は使わない。 なお、星印はFortranの77標準で導入されたもので、 それまでは、標準として明記されたものではないが、ほとんどの機種で、 標準入力には装置番号5、標準出力には6が使われていた。 今も、5, 6でも使えるようになっているコンパイラが多い。

Pascal

Pascalでは、 標準入力に対応するファイル変数はinput、 標準出力に対応するファイル変数はoutputである。 Pascalの入出力手続きではファイル変数を省略できるものが多いが、その場合、 resetreadではinputrewritewriteではoutputが 仮定される。


2000-06-28, 2002-07-11, 2002-07-18
増田 耕一 (MASUDA Kooiti)

[目次へ]