C/400

76. pipe と標準入出力について(1)

System i にも pipe というファイル識別子どうしを結びつけることができる関数が提供されている。
pipe は面白く機能を拡張してくれるのに加えて、とても有用である。
IBM にも pipe を使ったサンプル・ソースがほとんど見当たらないので
ここで使い方をサンプル・ソースとともに紹介していこう。

pipe という関数は2つのファイル識別子を結びつけて、ファイル同士が
メモリを通じてプロセス間通信も手軽に行うことができる。
例えばジョブ QPADEV0001 の中に存在している、あるファイルA と
別のジョブ QPADEV0002 の中に存在している別のファイルB と通信することができる。
QPADEV0001 のファイル A にデータを書き込むと、あら不思議、別の QPADEV0002
ファイル B から、その値を読み取ることができるのである。

パイプを介した標準入力、出力

一般に pipe はあるジョブの標準出力を別のジョブの標準入力へリダイレクトさせる
手段として UNIX の世界では広く利用されている。
UNIX のアプリケーションでは出力は一般に標準出力として作成しておけば
それを呼び出す上位の親プログラムでは、いつでも子プログラムの標準出力を
自分の標準入力として、いつでも簡単に取り出すことができる、という具合である。

■ 標準入力(STDIN)と標準出力(STDOUT

UNIX で言うところの標準入力( STDIN ) と標準出力( STDOUT )は System i の世界でも
あまりにも意識もせずに普通に使われている。
簡単に言えば、画面からの入力が標準入力( STDIN = Standard Input ) であり
printfwrite, fwrite 関数による基本的な文字の出力が
標準出力( STDOUT = Standard Output ) である。
System i では STDOUT は対話式ジョブで実行されている場合は画面に出力され、
バッチ・ジョブとして実行されている場合は QPRINT に印刷出力される。
System i のこれらの標準入出力関数は UNIX と同じように思えるが、
厳密に言うと重要なところで、微妙に異なるのである。
このあたりの詳細と使い方が IBM マニュアルにも IBM サイトや Webサイトにも
全く例やサンプル・ソースも無いので、今回、誤解のないようにここに解説を
公開するに至ったのである。