_Ropen() — レコード・ファイルをオープンして入出力操作を行う

フォーマット

#include <recio.h>

_RFILE *_Ropen(const char * filename, const char * mode, ...);

言語レベル

ILE C Extension

スレッド・セーフ

はい

説明

_Ropen() 関数は、mode パラメーターに従って、 filename で指定されたレコード・ファイルをオープンします。 mode パラメーターに varparm キーワード・パラメーターが指定された場合、 この後にはオプションのパラメーターが続きます。 オープン・モード・パラメーターおよびキーワード・パラメーターは、コンマと 1 つ以上のスペースで区切られます。 _Ropen() 関数は、データベース・ファイルを動的に作成しません。 _Ropen() 関数で参照するファイルは、すべて実在するものでなければなりません。 そうでない場合、オープン操作は失敗します。

_Ropen() 関数でオープンされたファイルは、 属している活動化グループが終了すると、暗黙的にクローズされます。 ある活動化グループ内のオープンしているファイルを指すポインターが、 別の活動化グループに渡され、そのオープンしている活動化グループが終了すると、 ファイル・ポインターは、以後無効になります。

_Ropen() 関数は、すべてのタイプのファイルに適用されます。filename 変数は、有効な任意の IBM® i システム・ファイル名です。

mode パラメーターは、ファイルに対して要求されるアクセスのタイプを指定します。 このパラメーターには、オープン・モードとその後に続くオプションのキーワード・パラメーターが含まれます。 mode パラメーターは、以下のいずれかの値になります。
モード
説明
rr
既存のファイルをオープンして、レコードを読み取ります。
wr
既存のファイルをオープンして、レコードを書き込みます。 ファイルにデータが含まれている場合、そのファイルが論理ファイルでなければ、その内容はクリアされます。
ar
既存のファイルをオープンして、ファイルの終わりにレコードを書き込みます (追加)。
rr+
既存のファイルをオープンして、レコードの読み取り、書き込み、または更新を行います。
wr+
既存のファイルをオープンして、レコードの読み取り、書き込み、または更新を行います。 ファイルにデータが含まれている場合、そのファイルが論理ファイルでなければ、その内容はクリアされます。
ar+
既存のファイルをオープンして、レコードの読み取りおよび書き込みを行います。 データは、すべてファイルの終わりに書き込まれます。
mode の後には、以下のいずれかのキーワード・パラメーターが続きます。
キーワード
説明
arrseq=value
この場合、指定できる value は、以下の通りです。
Y
ファイルを到着順に処理することを指定します。
N
ファイルの作成時に使用したアクセス・パスを使用してファイルを処理することを指定します。 これはデフォルトです。
blkrcd=value
この場合、指定できる value は、以下の通りです。
Y
レコード・ブロッキングを実行します。 オペレーティング・システムは、ユーザー向けに最も効率的なブロック・サイズを決定します。このパラメーターは、データベース、DDM、ディスケットおよびテープ・ファイルの場合に有効です。 このパラメーターは、入力専用または出力専用 (rr、wr、または ar の各モード) にオープンしているファイルの場合にのみ有効です。
N
レコード・ブロッキングを実行しません。 これはデフォルトです。
ccsid=value
ファイルの変換に使用する CCSID を指定します。 デフォルトは 0 で、ジョブ CCSID が使用されることを示します。
commit=value
この場合、指定できる value は、以下の通りです。
Y
コミットメント制御下でデータベース・ファイルをオープンすることを指定します。 あらかじめコミットメント制御をセットアップしておく必要があります。
N
コミットメント制御下でデータベース・ファイルをオープンしないことを指定します。 これはデフォルトです。
dupkey=value
指定できる value は、以下の通りです。
Y
_RIOFB_T 構造体内で重複キー値にフラグを立てます。
N
重複キー値にはフラグを立てません。 これはデフォルトです。
indicators=value
プリンター、ディスプレイ、および ICF ファイルに対して、標識が有効になります。 指定できる value は、以下の通りです。
Y
ファイルに関連した標識は、入出力バッファー内ではなく、別々の標識域に戻されます。
N
標識は、入出力バッファー内に戻されます。 これはデフォルトです。
insertkeyfb=value
この場合、指定できる value は、以下の通りです。
Y
arrseq=N での書き込み用にオープンされているキー付きファイルに対して挿入キー・フィードバックが要求されることを指定します。これはデフォルトです。
N
挿入キー・フィードバックが要求されないことを指定します。
注: _RIOFB_T 構造体のキー・フィールドが、アプリケーションで書き込みを追跡するステートメントによって参照されていない場合、insertkeyfb=N を指定すると書き込み時のパフォーマンスが向上する可能性があります。insertkeyfb=N が指定されている場合、最後の入出力操作が書き込み中のときは、_Rupfb() 関数はこの書き込み操作に関する情報を持つ _RIOFB_T 構造体を更新しません。
変更の始まりkeyfb=value変更の終わり
変更の始まりこの場合、指定できる value は、以下の通りです。
Y
arrseq=N での書き込み用にオープンされているキー付きファイルに対して読み取りキー・フィードバックが要求されることを指定します。 これはデフォルトです。
N
読み取りキー・フィードバックが要求されないことを指定します。
変更の終わり
変更の始まり注: _RIOFB_T 構造体のキー・フィールドがアプリケーションにより参照されていない場合、keyfb=N を指定するとパフォーマンスが向上する可能性があります。keyfb=N が指定されている場合、最後の入出力操作が読み取り中のときは、_Rupfb() 関数はこの読み取り操作に関する情報を持つ _RIOFB_T 構造体を更新しません。変更の終わり
lrecl=value
固定長レコードの長さと、可変長レコードの最大長 (バイト単位)。 このパラメーターは、ディスケット、ディスプレイ、プリンター、テープ、および保管ファイルの場合に有効です。
nullcap=value
この場合、指定できる value は、以下の通りです。
Y
プログラムは、レコード内のヌル・フィールドを処理できます。 これは、データベースと DDM ファイルの場合に有効です。
N
プログラムは、レコード内のヌル・フィールドを処理できません。 これはデフォルトです。
riofb=value
この場合、指定できる value は、以下の通りです。
Y
_RIOFB_T 構造体内のすべてのフィールドが、_RIOFB_T 構造体を指すポインターを戻す入出力操作によって更新されます。 ただし、_Rreadk 関数を使用している場合、blk_filled_by フィールドは更新されません。 これはデフォルトです。
N
_RIOFB_T 構造体内の num_bytes フィールドのみが更新されます。
rtncode=value
この場合、指定できる value は、以下の通りです。
Y
このオプションを使用すると、例外の生成と処理をバイパスします。 これにより、ファイルの終わりの場合とレコードが見つからない場合のパフォーマンスが向上します。 ファイルの終わりが検出された場合、num_bytes は EOF に設定されますが、errno 値は生成されません。 レコードが見つからない場合、num_bytes はゼロに設定され、errno は EIORECERR に設定されます。 このパラメーターは、データベースと DDM ファイルの場合にのみ有効です。 DDM ファイルの場合、num_bytes は _Rfeod については更新されません。
N
ファイルの終わりの場合とレコードが見つからない場合に、例外の生成と処理の通常プロセスが行われます。 これはデフォルトです。
secure=value
この場合、指定できる value は、以下の通りです。
Y
ファイルをオーバーライドから保護します。
N
ファイルをオーバーライドから保護しません。 これはデフォルトです。
splfname=(value)
スプール出力専用です。 この場合、値は以下のいずれかになります。
*FILE
スプール出力ファイル名にプリンター・ファイルの名前を使用します。
spool-file-name
スプール出力ファイルの名前を指定します。 使用できるのは最大 10 文字です。
usrdta=(value)
スプール出力専用に、ファイルを識別するユーザー指定のデータを指定します。
user-data
10 文字までのユーザー指定のテキストを指定します。
varparm=(list)
この場合、(list) は、 _Ropen() にどのオプション・パラメーターを渡すかを示すオプション・キーワードのリストです。 リスト内のキーワードの順序は、mode パラメーターの後に表示されるオプション・パラメーターの順序を表します。 有効なオプション・キーワードは、以下のとおりです。
lvlchk
lvlchk キーワードは、#pragma mapinc で lvlchk オプションと結合して使用します。 このキーワードを使用する場合、タイプ _LVLCHK_T (#pragma mapinc で生成) のオブジェクトを指すポインターは、 _Ropen() 関数のモード・パラメーターの後に指定する必要があります。 このポインターの詳細については、ILE C/C++ プログラマーの手引き (英語) の #pragma mapinc の lvlchk オプションを参照してください。
vlr=value
可変長レコード。value は、ファイルに書き込まれるレコードの最小バイト長を表します。 この値は -1 になるか、または 0 からファイルの最大レコード長までの範囲の値になります。 このパラメーターは、データベースと DDM ファイルの場合に有効です。

VLR 処理が必要な場合、_Ropen() は min_length フィールドを設定します。 デフォルト値が使用されない場合は、ユーザーが提供する最小値が直接 min_length フィールドにコピーされます。 デフォルト値が指定された場合、_Ropen() は、 オープン・データ・パスの DB 部分から最小長を取得します。

戻り値

_Ropen() 関数は、ファイルが正常にオープンされた場合、タイプ _RFILE の構造体を指すポインターを戻します。 ファイルのオープンが正常に実行されなかった場合は NULL を戻します。

errno の値は、次のいずれかに設定されます。
意味
EBADMODE
指定されたファイル・モードが無効です。
EBADNAME
指定されたファイル名が無効です。
ECONVERT
変換エラーが発生しました。
ENOTOPEN
ファイルはオープンされていません。
EIOERROR
リカバリー不能な入出力エラーが発生しました。
EIORECERR
リカバリー可能な入出力エラーが発生しました。
errno の設定については、表 1 および 表 1 を参照してください。

#include <stdio.h>
#include <stdlib.h>
#include <recio.h>
 
int main(void)
{
    _RFILE      *fp;
 
    /* Open the file for processing in arrival sequence.             */
    if (( fp = _Ropen ( "MYLIB/T1677RD1", "rr+, arrseq=Y" )) == NULL )
    {
        printf ( "Open failed¥n" );
        exit ( 1 );
    }
    else
    /* Do some processing */;
 
 
    _Rclose ( fp );
}