_Rreadnc () -サブファイル内の次の変更レコードの読み取り
形式
#include <recio.h>
_RIOFB_T *_Rreadnc(_RFILE *fp, void *buf, size_t size);言語レベル
ILE C Extension
スレッド・セーフ
いいえ
説明
_Rreadnc() 関数は、 fpに関連したサブファイル内の現在位置から、次に変更されたレコードを読み取ります。 画面から読み取られるデータの最小 size が、システム・バッファーから buf にコピーされます。
以下は、
_Rreadnc() 関数の有効なパラメーターです。- バッファー
- 読み取ったデータを保管するバッファーを指定します。 位置指定モードを使用する場合、このパラメーターは NULL に設定する必要があります。
- サイズ
- 読み取って 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);
}