Unixでは、 それぞれのプログラムから 特にファイルを使う宣言をしなくても使える入出力先として、 標準入力、標準出力 のほかに、標準エラー出力というものが用意されている。
たとえば、フィルター型のプログラムで、結果はファイルに出したいが、 計算がうまくできないときのエラーメッセージは端末に出したいことがある。 この場合、結果は標準出力に、エラーメッセージは標準エラー出力に出すよう にプログラム(仮に名前をprogramとしよう)を作っておき、
% program > outfileのように実行すれば、結果は (この例の場合outfileという名前の)ファイルに 書かれるが、エラーメッセージは端末画面に出る。
エラーメッセージも結果といっしょにファイルにとりたいのならば、 Cシェルのもとでは、
% program >& outfileのような形で実行すればよい。 (出力先を示す不等号に続く & マークは エラー出力をも「リダイレクト」(redirect)する、つまりそこに 指定したファイルに向けることを示す。バックグラウンドジョブの指定 とは同じ文字だが意味は別である。)
標準出力と標準エラー出力を別のファイルに書くようにすることも 可能ではあるが方法が複雑なのでここでは省略する。
C言語はUnixとともに発達したので、標準エラー出力の使い方はC言語では しっかり決まっている。stderrというファイル変数が、あらかじめ (stdio.hで)定義されているので、
fprintf(stderr, 出力したい文字列);の形で使えばよい。
標準エラー出力はFortran言語の標準としては決まっていないが、 g77やDEC Fortranでは、WRITE文の入出力装置番号のところを「0」にすれば よい。 (なお、標準入力では「*」または5、標準出力では「*」または6である。)
標準エラー出力は言語の標準としては決まっていない。 DEC Pascalのマニュアルによれば、errというファイル変数が この目的のためにあらかじめ定義されている。 ただし、outputとは違い、 ファイル変数(TEXT型)として宣言をし、 しかも、rewrite手続きを使ってファイルを開いておく必要がある (例文hensa1.p参照)。
(なお、ファイル変数(TEXT型)としてerrを宣言し、 あらかじめ端末(/dev/tty)に割り当てておくこともできる。 ただしこの場合、標準エラー出力を使っているわけではないので、 >& によるリダイレクションはできない。)
フィルター型のプログラムの例文 のうち、配列を使った例である hensa.{p,f,c} を、 配列の寸法をはみ出すような場合はその前にエラーメッセージを出して止める ように修正したものを、
として用意した。 なお、これらの例文では、配列の寸法 ndim (Cでは大文字)を、 kion.tokyo や ame.tokyo の行数よりも少なくしてあるので、これらのデータを読ませれば 用意したエラーメッセージが出るはずである。