_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
回復可能入出力エラーが起こりました。
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);
}

関連情報