_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 欄位。 keyrrn 欄位也會更新。 如果與 fp 相關聯的檔案是顯示檔,則會更新 sysparm 欄位。 如果不成功,則 num_bytes 欄位會設為小於 size 的值,並將變更錯誤碼。

錯誤碼的值可以設為:
Value
意義
ENOTREAD
未開啟檔案進行讀取作業。
ETRUNC
I/O 作業發生截斷。
EIOERROR
發生非可回復I/O錯誤。
EIORECERR
發生可回復I/O錯誤。
如需錯誤碼設定,請參閱 表 1表 1

範例

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

相關資訊