第6章 注意事項
6.2 留意事項
・ 位置付け時の有効キー長が、ファイルが持つキーパートの長さの合計を超えています。
FA_EUNDEFKEY(122) 索引ファイル情報を取得できません。
ダミーファイル機能を指定して、ファイルのオープン時にレコードキーの指定を省略した場 合、索引ファイル情報は取得できません。詳細については、“3.16.1 ダミーファイル”を参照し てください。
FA_EOTHER(999) 上記以外のエラーが発生しました。この場合、cobfa_stat()関数の復帰値を取得して状況を判
断してください。cobfa_stat()関数については“3.11.1 cobfa_stat()”を参照してください。
4.2 入出力状態
当アクセスルーチンでは、入出力状態を取得するとき、cobfa_stat()関数を呼び出します。cobfa_stat()関数については“3.11.1 cobfa_stat()”を参照してください。
入出力状態の種類とその詳細については、“NetCOBOL 使用手引書”の“付録B 入出力状態一覧”を参照してください。
ここでは、提供する例題プログラムについて説明します。
サンプルプログラムは、次の場所の、各ロケール名のディレクトリに格納されます。
/opt/FJSVcbl64/samples
5.1 行順ファイルの読込み
概要
このサンプルプログラムは、指定したファイルを行順ファイルとしてINPUTモードでオープンし、読み込んだレコードの内容を表示しま す。
提供プログラム
・ cobfa01.c (Cソースプログラム)
・ cobfa01.mk (Makefile)
使用しているCOBOLファイルアクセスルーチンの関数
・ cobfa_open()関数
・ cobfa_rdnext()関数
・ cobfa_stat()関数
・ cobfa_errno()関数
・ cobfa_reclen()関数
・ cobfa_close()関数
プログラムの翻訳とリンク
Makefileの“CDIR =”と書かれている行の右側の内容が、Cコンパイラをインストールしたディレクトリ名となるように修正してください。ま
た“COBDIR =”と書かれている行の右側の内容が、COBOLコンパイラをインストールしたディレクトリ名となるように修正してください。
Makefileを修正した後、以下のコマンドを入力します。
$ make -f cobfa01.mk
プログラムの実行
適当なテキストファイルをコマンドライン引数にしてプログラムを実行します。ここではcobfa01自身のソースプログラムを入力します。
> cobfa01 cobfa01.c
5.2 行順ファイルの読込みと索引ファイルの書出し
概要
このサンプルプログラムは、特定の行順ファイル(cobfa02.txt)をINPUTモードでオープンし、そのレコードの内容を索引ファイル
(cobfa02.idx)のレコードとして書き出します。
最後に、その索引ファイルをINPUTモードでオープンし、主キーの順で画面に表示します。
提供プログラム
・ cobfa02.c (Cソースプログラム)
・ cobfa02.txt (入力用行順ファイル)
・ cobfa02.mk (Makefile)
使用しているCOBOLファイルアクセスルーチンの関数
・ cobfa_open()関数
・ cobfa_rdnext()関数
・ cobfa_wrkey()関数
・ cobfa_stkey()関数
・ cobfa_close()関数
プログラムの翻訳とリンク
Makefileの“CDIR =”と書かれている行の右側の内容が、Cコンパイラをインストールしたディレクトリ名となるように修正してください。ま
た“COBDIR =”と書かれている行の右側の内容が、COBOLコンパイラをインストールしたディレクトリ名となるように修正してください。
Makefileを修正した後、以下のコマンドを入力します。
$ make -f cobfa02.mk
プログラムの実行
コマンドライン引数を付けずに実行します。
> cobfa02
5.3 索引ファイルの情報の取得
概要
このサンプルプログラムは、指定したファイルを索引ファイルとしてINPUTモードでオープンし、ファイル自体の属性と、レコードキーの 各構成を表示します。
提供プログラム
・ cobfa03.c (Cソースプログラム)
・ cobfa03.mk (Makefile)
使用しているCOBOLファイルアクセスルーチンの関数
・ cobfa_open()関数
・ cobfa_indexinfo()関数
・ cobfa_stat()関数
・ cobfa_errno()関数
・ cobfa_close()関数
プログラムの翻訳とリンク
Makefileの“CDIR =”と書かれている行の右側の内容が、Cコンパイラをインストールしたディレクトリ名となるように修正してください。ま
た“COBDIR =”と書かれている行の右側の内容が、COBOLコンパイラをインストールしたディレクトリ名となるように修正してください。
Makefileを修正した後、以下のコマンドを入力します。
$ make -f cobfa03.mk
プログラムの実行
適当な索引ファイルをコマンドライン引数にしてプログラムを実行します。ここではcobfa02を実行して生成した索引ファイルを指定しま す。
> cobfa03 ../cobfa02/cobfa02.idx
制御文字 意味 動作 0x0C 改頁 レコードの区切り文字として扱います。
0x0D 復帰 レコードの区切り文字として扱います。
0x1A データ終了記号 ファイルの終端として扱います。
・ 読み込んだレコードにタブが存在した場合、そのタブコードを空白に置き換えます。詳細は、“NetCOBOL使用手引書”
の“6.3.3 行順ファイルの処理”を参照してください。
レコード順ファイル
・ 印刷ファイルを扱えません。したがって、以下の仕様となります。
- COBOL構文のLINAGE句に相当するものはありません。
- COBOL構文のWRITE文の改行制御/ページ制御に相当するものはありません。
相対ファイル
・ 以下の関数では、相対レコード番号を引数で明に指定する必要があります。
- cobfa_delrec()関数 : 乱削除
- cobfa_rewrec()関数 : 乱書換え
- cobfa_rdrec()関数 : 乱読込み
- cobfa_strec()関数 : 位置決め
・ 本製品では、他UNIX系COBOLで大容量ファイルの指定時に使用していた以下の関数と、それらに対応する通常の関数との機 能差はありません。
- cobfa_delrec64()関数 : 乱削除
- cobfa_rewrec64()関数 : 乱書換え
- cobfa_rdrec64()関数 : 乱読込み
- cobfa_strec64()関数 : 位置決め
- cobfa_recnum64()関数 : 相対レコード番号の取得
なお、上記関数を使用した場合は、従来と同様の動作をします。
索引ファイル
・ 既存ファイルのオープン時に、レコードキー構成を指定しないでオープンすることができます。この場合、ファイルアクセスルーチ ンは既存ファイル内部のレコードキー構成を調査してオープンします。
・ オープン中の索引ファイルの属性(レコード長、レコード形式)とレコードキー構成を調べる機能(cobfa_indexinfo()関数)があります。
マルチスレッド
・ COBOLファイルアクセスの排他制御(排他ロック/排他ロック解除)には、必ず以下の関数を使ってください。詳細については、各API
関数の説明を参照してください。
- LOCK_cobfa()
- UNLOCK_cobfa()
・ マルチスレッド環境下では、入出力機能を持つAPI関数の呼出し前、またはファイルの情報を取得するAPI関数の呼出し前に、必 ず排他制御を行ってください。排他制御を行わないと、競合によって以下のような問題が発生する可能性があります。
- ファイル入出力の不正な実行結果
- スレッドの異常終了
- ファイル内容の破壊
排他制御のロック・アンロックのタイミングについては、“3.14.1 LOCK_cobfa()”の使い方の例を参照してください。
Unicode
Unicodeを扱う場合の留意事項を以下にあげます。
・ 動作モードがUnicodeのCOBOLアプリケーションで扱う索引ファイルのキーパート長kp_lengは、バイト数を設定してください。
・ 動作モードがUnicodeのCOBOLアプリケーションで扱う行順ファイルのレコード長には、バイト数を指定してください。