第5章  ストリームファイルってなに?
RPGプログラマーの為のC言語講座

AS/400は、OS標準でRDBを実装しています。
そして、ライブラリーに作成するファイルは、特に意識しなくても、RDB形式を取ります。
通常のファイルI/Oはレコード単位でのI/Oとなり、通常、レコードの中は固定フィールドと なります。

他のプラットフォームは、OSに、このような機能ははついていません。
RDBを使用したい場合はDBMSを導入し、その中でこのような処理をします。

PCやUNIXの標準のファイルシステムでは、ディレクトリーにファイル名などの属性は登録しますが、 レコードレイアウトのなどは属性としてもちません。
データはファイルに連続して入ります。
データの区切りなどにCRやLFなどの制御文字を挿入することで、ファイルの表示をコントロールしています。

このようなファイル形式をストリームファイルと呼びます。

ストリームファイルには、事前に定義したフィールドというものはありません。
データは連続して置かれ、改行などの制御コードを含みます。

C言語は、ストリーム形式しかサポートされていない環境で主に使用されてきたため、
標準のI/O関数はストリーム形式をサポートするようになっています。

と言う訳で、AS/400のC言語環境でファイルI/Oを行うには、大きく3種類の方法が存在します。

  • RPGなどと同じく、AS/400のファイル(PF,LF,DSPF,PRTF,ICFFなど)にレコード単位でI/Oする
      ILE−Cには、そのための関数群が提供されています。これらAS/400独自の関数を使うことにより RPGなどとある程度同じイメージで、レコード単位のファイルI/Oが可能です。
  • Cから、ファイル(ストリームファイル)にI/Oする標準関数を使い、AS/400のPF,LFに出力する
      Cからは連続したバッファー出力を行うと、OS/400が物理ファイルのレコード形式にマップする。 Cからは連続したストリームファイルに見えるが、実際のデータは、ファイルの長さに分割されて出力される。
  • Cから、ファイル(ストリームファイル)にI/Oする標準関数を使い、IFS(統合ファイルシステム)に出力する。
      IFS(統合ファイルシステム)は、ライブラリー形式以外に、標準のストリームファイル形式をサポートしています。
      そのため、ほぼ、他のプラットフォーム(UNIX,WINDWOS系)とコンパチの使い方が可能になります。