_Rreadd () -相対レコード番号によるレコードの読み取り
形式
#include <recio.h>
_RIOFB_T *_Rreadd (_RFILE *fp, void *buf, size_t size,
int opts, long rrn);言語レベル
ILE C Extension
スレッド・セーフ
はい
ただし、スレッド間でファイル・ポインターが渡された場合、入出力フィードバック域はそれらのスレッド間で共有されます。
説明
_Rreadd() 関数は、 fpに関連したファイルの到着順アクセス・パスにある rrn で指定されたレコードを読み取ります。 ファイルが更新用にオープンされている場合、__NO_LOCK が指定されていない限り、 _Rreadd() 関数は rrn によって指定されたレコードをロックします。 ファイルがキー付きファイルである場合、キー順アクセス・パスは無視されます。 最大で size のバイト数が、レコードから buf にコピーされます (移動モードのみ)。
_Rreadd() 関数には、以下のパラメーターが有効です。- バッファー
- 読み取ったデータを保管するバッファーを指定します。 位置指定モードを使用する場合、このパラメーターは NULL に設定する必要があります。
- サイズ
- 読み取って buf に保管するバイト数を指定します。 位置指定モードを使用する場合、このパラメーターは無視されます。
- rrn
- 読み取りの対象となるレコードの相対レコード番号。
- オプション
- ファイルの処理とアクセスのオプションを指定します。 指定可能なオプションは次の通りです。
- __DFT
- ファイルが更新用にオープンしている場合、読み取り中のレコードは更新のためにロックされます。 以前にロックしたレコードは、以後ロックされなくなります。
- __NO_LOCK
- 位置指定されているレコードをロックしません。
_Rreadd() 関数は、データベース、DDM、およびディスプレイ (サブファイル) ファイルに対して有効です。
戻り値
_Rreadd() 関数は、 fpに関連した _RIOFB_T 構造体へのポインターを戻します。 _Rreadd() 操作が正常に終了すると、 num_bytes フィールドは、システム・バッファーからユーザーのバッファーに転送されたバイト数 (移動モード) またはファイルのレコード長 (位置指定モード) に設定されます。 blkrcd=Y および riofb=Y が指定された場合は、
_RIOFB_T 構造体の blk_count および blk_filled_by フィールドが更新されます。 key および rrn フィールドも更新されます。 fp に関連したファイルがディスプレイ・ファイルである場合は、sysparm フィールドが更新されます。 これが正常終了しなかった場合、num_bytes フィールドは size より小さい値に設定され、errno が変更されます。
例
#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 second record. */
_Rreadd ( fp, NULL, 20, __DFT, 2 );
printf ( "Second record: %10.10s\n", *(fp->in_buf) );
_Rclose ( fp );
}