IFS のストリーム・ファイルが存在しているかどうかを検査するには
C言語の関数 : lstat を使うのが最も簡単である。
lstat はストリーム・ファイルの属性を取得する関数 (API) であり
ストリーム・ファイルが存在していなければエラー (-1) を戻す。
ここでは lstat によって IFS の存在を確認する簡単な RPGプログラムを
紹介しよう。
【 TESTIFS: IFSストリーム・ファイルの存在を検査するRPGプログラム 】
0001.00 H DFTNAME(TESTIFS) DATEDIT(*YMD/) BNDDIR('QC2LE') 0002.00 F********** ストリーム・ファイルの存在チェック *********************** 0003.00 F* 0004.00 F********************************************************************** 0005.00 D LSTAT PR 4B 0 EXTPROC('lstat') 0006.00 D FILE * VALUE OPTIONS(*STRING) 0007.00 D INFO * VALUE OPTIONS(*STRING) 0008.00 0009.00 D*( ファイル属性 ) 0010.00 D INFO_P S * INZ(%ADDR(INFO)) 0011.00 D INFO DS 128 0012.00 D ALLOCSIZ 45 48B 0 0013.00 0014.00 D GIFFILE C CONST('/QATMHSTOUT/ALASKA.GIF') 0015.00 D RES S 4B 0 INZ(0) 0016.00 D TRUE S 4B 0 INZ(0) 0017.00 D FALSE S 4B 0 INZ(-1) 0018.00 0019.00 /FREE 0020.00 RES = LSTAT(GIFFILE:INFO_P); 0021.00 /END-FREE 0022.00 C IF RES = TRUE 0023.00 C ' ありました 'DSPLY ANS 1 0024.00 C ELSE 0025.00 C 'NOT FOUND !' DSPLY ANS 0026.00 C ENDIF 0027.00 C SETON LR 0028.00 C RETURN
【 解説 】
lstat 関数をインクルードするためには BNDDIR (‘QC2LE’) を定義して
C関数のライブラリーをインクルードできるようにしておくこと。
BNDDIR (‘QC2LE’) によって C言語のライブラリーの中から lstat の入った
サービス・プログラムがインクルードされるようになる。
0005.00 D LSTAT PR 4B 0 EXTPROC('lstat') 0006.00 D FILE * VALUE OPTIONS(*STRING) 0007.00 D INFO * VALUE OPTIONS(*STRING)
は lstat の定義を宣言している。
lstat は英小文字だが見やすくするために英大文字 LSTAT として再定義している。
0014.00 D GIFFILE C CONST('/QATMHSTOUT/ALASKA.GIF') 0015.00 D RES S 4B 0 INZ(0) 0016.00 D TRUE S 4B 0 INZ(0) 0017.00 D FALSE S 4B 0 INZ(-1)
は IFS: /QATMHSTOUT/ALASKA.GIF の定義と
TRUE FALSE を定義している。
lstat の結果は C言語の Integer (整数) 値として戻るので 4B 0 として
RPG でも Integer (整数) として定義している。
0019.00 /FREE 0020.00 RES = LSTAT(GIFFILE:INFO_P); 0021.00 /END-FREE
で、フリー・フォーマットで GIFFILE の存在検査を行っている。
フリー・フォーマットですべてを記述することができるが、まだフリー・フォーマットに
不慣れな人も多いので固定フォーマットとの混在でわかりやすく記述した。
0022.00 C IF RES = TRUE 0023.00 C ' ありました 'DSPLY ANS 1 0024.00 C ELSE 0025.00 C 'NOT FOUND !' DSPLY ANS 0026.00 C ENDIF
によって存在結果を表示している。