_Rreadnc() — サブファイル内の次の変更済みレコードの読み取り
フォーマット
#include <recio.h>
_RIOFB_T *_Rreadnc(_RFILE *fp, void *buf, size_t size);
言語レベル
ILE C Extension
スレッド・セーフ
いいえ
説明
_Rreadnc() 関数は、fp に関連したサブファイル内の現在位置から次のレコードを読み取ります。 画面から読み取られるデータの最小 size が、システム・バッファーから buf にコピーされます。
以下に、_Rreadnc() 関数の有効なパラメーターを示します。
- buf
- 読み取ったデータを保管するバッファーを指定します。 位置指定モードを使用する場合、このパラメーターは NULL に設定する必要があります。
- size
- 読み取って buf に保管するバイト数を指定します。
_Rreadnc() 関数は、サブファイルの場合に有効です。
戻り値
_Rreadnc() 関数は、fp に関連した _RIOFB_T 構造体を指すポインターを戻します。 _Rreadnc() 操作が正常終了した場合、num_bytes フィールドは、 システム・バッファーからユーザーのバッファーに転送されたバイト数 (移動モード)、 またはファイルのレコード長 (位置指定モード) に設定されます。 rrn および sysparm フィールドは更新されます。 現在位置とファイルの終わりの間で変更されたレコードがない場合、 num_bytes フィールドは EOF に設定されます。 これが正常終了しなかった場合、num_bytes フィールドは、size より小さい値に設定され、errno が変更されます。
errno の値は、次のいずれかに設定されます。
- 値
- 意味
- ENOTREAD
- ファイルは読み取り操作用にオープンされていません。
- ETRUNC
- 入出力操作で切り捨てが発生しました。
- EIOERROR
- リカバリー不能な入出力エラーが発生しました。
- EIORECERR
- リカバリー可能な入出力エラーが発生しました。
例
#include <stdio.h>
#include <stdlib.h>
#include <recio.h>
#define LEN 10
#define NUM_RECS 20
#define SUBFILENAME "MYLIB/T1677RD6"
#define PFILENAME "MYLIB/T1677RDB"
typedef struct {
char name[LEN];
char phone[LEN];
} pf_t;
#define RECLEN sizeof(pf_t)
void init_subfile(_RFILE *, _RFILE *);
int main(void)
{
_RFILE *pf;
_RFILE *subf;
/*************************************************
* Open the subfile and the physical file. *
*************************************************/
if ((pf = _Ropen(PFILENAME, "rr")) == NULL) {
printf("can't open file %s¥n", PFILENAME);
exit(1);
}
if ((subf = _Ropen(SUBFILENAME, "ar+")) == NULL) {
printf("can't open file %s¥n", SUBFILENAME);
exit(2);
}
/*************************************************
* Initialize the subfile with records *
* from the physical file. *
*************************************************/
init_subfile(pf, subf);
/*************************************************
* Write the subfile to the display by writing *
* a record to the subfile control format. *
*************************************************/
_Rformat(subf, "SFLCTL");
_Rwrite(subf, "", 0);
_Rreadnc(subf, "", 0);
/*************************************************
* Close the physical file and the subfile. *
*************************************************/
_Rclose(pf);
_Rclose(subf);
}