IFS のストリーム・ファイルが存在しているかどうかを検査するには
C言語の関数 : lstat
を使うのが最も簡単である。
lstat はストリーム・ファイルの属性を取得する関数 (API) であり
ストリーム・ファイルが存在していなければエラー (-1) を戻す。
ここでは lstat によって 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
によって存在結果を表示している。