_Rreadd () -依相對記錄號碼讀取記錄
格式
#include <recio.h>
_RIOFB_T *_Rreadd (_RFILE *fp, void *buf, size_t size,
int opts, long rrn);語言層次
ILE C 延伸
安全執行緒
是
不過,如果在執行緒之間傳遞檔案指標,則會在那些執行緒之間共用 I/O 回饋區域。
說明
_Rreadd() 函數會讀取與 fp相關聯之檔案的到達順序存取路徑中 rrn 所指定的記錄。 如果開啟檔案進行更新,除非指定 __NO_LOCK ,否則 _Rreadd() 函數會鎖定 rrn 指定的記錄。 如果檔案是含索引鍵的檔案,則會忽略含索引鍵的存取路徑。 最多可以將 大小 個位元組從記錄複製到 buf (僅限移動模式)。
下列參數適用於
_Rreadd() 函數。- buf
- 指向要儲存所讀取資料的緩衝區。 如果使用尋找模式,則此參數必須設為 NULL。
- 大小
- 指定要讀取並儲存在 buf中的位元組數。 如果使用尋找模式,則會忽略此參數。
- rrn
- 要讀取之記錄的相對記錄號碼。
- opts
- 指定檔案的處理及存取選項。 可能的選項如下:
- __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 的值,並將變更錯誤碼。
範例
#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 );
}