_Rreadl () -讀取最後一筆記錄

格式

#include <recio.h>

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

語言層次

ILE C 延伸

安全執行緒

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

說明

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

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

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

回覆值

_Rreadl() 函數會傳回與 fp相關聯之 _RIOFB_T 結構的指標。 如果 _Rreadl() 作業成功,則 num_bytes 欄位會設為從系統緩衝區傳送至使用者緩衝區 (移動模式) 的位元組數,或檔案的記錄長度 (尋找模式)。 將更新 keyrrn 欄位。 如果發生記錄封鎖,將會更新 blk_count 和 blk_filled_by 欄位。 如果檔案是空的, num_bytes 欄位會設為 EOF。 如果不成功,則 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 last record.                                          */
    _Rreadl ( fp, NULL, 20, __DFT );
    printf ( "Last record: %10.10s\n", *(fp->in_buf) );
 
    _Rclose ( fp );
}

相關資訊