フォーマット
#include <recio.h> _RIOFB_T *_Rreadl(_RFILE *fp, void *buf, size_t size, int opts);
言語レベル: ILE C Extension
スレッド・セーフ: はい。ただし、スレッド間でファイル・ポインターが渡された場合、入出力フィードバック域はそれらのスレッド間で共有されます。
説明
_Rreadl() 関数は、fp で指定されたファイルの現在使用されているアクセス・パス内の最後のレコードを読み取ります。 アクセス・パスは、キー・シーケンスまたは到着順です。 最大で size のバイト数が、レコードから buf にコピーされます (移動モードのみ)。 ファイルが更新用にオープンされているときに __NO_LOCK が指定されない場合、_Rreadl() 関数は、最後のレコードをロックします。
以下に、_Rreadl() 関数の有効なパラメーターを示します。
_Rreadl() 関数は、データベースと DDM ファイルの場合に有効です。
戻り値
_Rreadl() 関数は、fp に関連した _RIOFB_T 構造体を指すポインターを戻します。 _Rreadl() 操作が正常終了した場合、 num_bytes フィールドは、システム・バッファーからユーザーのバッファーに転送されたバイト数 (移動モード)、 またはファイルのレコード長 (位置指定モード) に設定されます。 key および rrn フィールドは更新されます。 レコード・ブロッキングが行われている場合は、blk_count および blk_filled_by フィールドが更新されます。 ファイルが空の場合、num_bytes フィールドは EOF に設定されます。 これが正常終了しなかった場合、num_bytes フィールドは size より小さい値に設定され、errno が変更されます。
errno の値は、次のいずれかに設定されます。
errno の設定については、表 12 および 表 14 を参照してください。
_Rreadl() の使用例
#include <stdio.h> #include <stdlib.h> #include <recio.h> int main(void) { _RFILE *fp; _XXOPFB_T *opfb; /* Open the file for processing in arrival sequence. */ if (( fp = _Ropen ( "MYLIB/T1677RD1", "rr+, arrseq=Y" )) == NULL ) { printf ( "Open failed¥n" ); exit ( 1 ); } /* Get the library and file names of the file opened. */ opfb = _Ropnfbk ( fp ); printf ( "Library: %10.10s¥nFile: %10.10s¥n", opfb->library_name, opfb->file_name); /* Get the last record. */ _Rreadl ( fp, NULL, 20, __DFT ); printf ( "Last record: %10.10s¥n", *(fp->in_buf) ); _Rclose ( fp ); }
関連情報