_Rreads () -讀取相同記錄

格式

#include <recio.h>

_RIOFB_T *_Rreads(_RFILE *fp, void *buf, size_t size, int opts);

語言層次

ILE C 延伸

安全執行緒

不過,如果在執行緒之間傳遞檔案指標,則會在那些執行緒之間共用 I/O 回饋區域。

說明

_Rreads() 函數會讀取目前用於與 fp相關聯之檔案的存取路徑中的現行記錄。 存取路徑可以是索引順序或到達順序。 最多可以將 大小 個位元組從記錄複製到 buf (僅限移動模式)。 如果開啟檔案進行更新,除非指定 __NO_LOCK ,否則 _Rreads() 函數會鎖定記錄所定位的目標。

如果檔案中與 fp 相關聯的現行位置沒有相關聯的記錄,則 _Rreads() 函數會失敗。

當檔案開啟以進行記錄區塊處理時, _Rreads() 函數無效。

以下是 _Rreads() 函數的有效參數。
buf
指向要儲存所讀取資料的緩衝區。 如果使用尋找模式,則此參數必須設為 NULL。
大小
指定要讀取並儲存在 buf中的位元組數。 如果使用尋找模式,則會忽略此參數。
opts
指定檔案的處理選項。 可能的值為:
__DFT
如果開啟檔案以進行更新,則會鎖定正在讀取或定位的記錄。 將不再鎖定先前鎖定的記錄。
__NO_LOCK
請勿鎖定要定位至的記錄。

_Rreads() 函數對資料庫及 DDM 檔案有效。

回覆值

_Rreads() 函數會傳回與 fp相關聯之 _RIOFB_T 結構的指標。 如果 _Rreads() 作業成功,則 num_bytes 欄位會設為從系統緩衝區傳送至使用者緩衝區 (移動模式) 的位元組數,或檔案的記錄長度 (尋找模式)。 keyrrn 欄位也會更新。 如果不成功,則 num_bytes 欄位會設為小於 size的值,並且會變更錯誤碼。

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

範例

#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) );
 
    /* Get the same record without locking it.                       */
    _Rreads ( fp, NULL, 20, __NO_LOCK);
    printf ( "Same record: %10.10s\n", *(fp->in_buf) );
 
    _Rclose ( fp );
}

相關資訊