_Rreadf () -读取第一个记录

格式

#include <recio.h>

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

语言级别

ILE C 扩展

线程安全

但是,如果文件指针在线程之间传递,那么 I/O 反馈区域将在这些线程之间共享。

描述

_Rreadf() 函数读取当前用于 fp指定的文件的访问路径中的第一个记录。 访问路径可以是键控序列或到达序列。 如果打开该文件以进行更新,那么除非指定 __NO_LOCK ,否则 _Rreadf() 函数将锁定第一个记录。 最多可将 size 字节数从记录复制到 buf (仅移动方式)。

以下是 _Rreadf() 函数的有效参数。
buf
此参数指向要存储读取的数据的缓冲区。 如果使用了定位方式,那么此参数必须设置为 NULL。
大小
此参数指定要读取并存储在 buf中的字节数。 如果使用了定位方式,那么将忽略此参数。
选项
此参数指定文件的处理和访问选项。 可能的选项是:
__DFT
如果打开文件以进行更新,那么将锁定正在读取或定位到的记录以进行更新。 将不再锁定先前锁定的记录。
__NO_LOCK(无锁
不锁定要定位的记录。

_Rreadf() 函数对数据库和 DDM 文件有效。

返回值

_Rreadf() 函数返回指向 fp指定的 _RIOFB_T 结构的指针。 如果 _Rreadf() 操作成功,那么 num_bytes 字段将设置为从系统缓冲区传输到用户缓冲区的字节数 (移动方式) 或文件的记录长度 (定位方式)。 将更新 keyrrn 字段。 如果正在进行记录分块,那么将更新 blk_count 和 blk_filled_by 字段。 如果文件为空,那么 num_bytes 字段设置为 EOF。 如果失败,那么 num_bytes 字段将设置为小于 size的值,并且会更改 errno。

errno 的值可以设置为:
含义
阅读
未打开该文件以执行读操作。
ETRUNC
在 I/O 操作上发生截断。
EIOERROR
发生了不可恢复的I/O错误。
EIORECERR
发生了可恢复的I/O错误。
请参阅 表 1表 1 以获取 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 first record.                                         */
    _Rreadf ( fp, NULL, 20, __DFT );
    printf ( "First record:  %10.10s\n", *(fp->in_buf) );
 
    /* Delete the first record.                                      */
    _Rdelete ( fp );
 
    _Rclose ( fp );
}

相关信息