_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
リカバリー可能な入出力エラーが発生しました。

errno の設定については、表 1 および 表 1 を参照してください。

#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);
}