处理系统缓冲区

可以通过直接对系统缓冲区执行读写操作来提高 ILE C/C++ 程序的 I/O 性能,而不需要应用程序定义的缓冲区。 此系统访问称为定位方式。 下面说明了在读取源物理文件时如何直接操作系统缓冲区。

图 1。 使用系统缓冲区
fp = _Ropen("MY_LIB/MY_FILE", "rr, blkrcd = Y, riofb = N");

while ( (_Rreadn(fp, NULL, 92, __DFT))->num_bytes != EOF )
{

printf("%75.75s\n", ((char *) (*(fp->in_buf))) + 12);

}

_Rclose(fp);

上面的示例代码打印文件中包含的每个记录最多 75 个字符。 _Rreadn() 的第二个参数 NULL 允许您处理系统缓冲区中的记录。 _RFILE 结构包含 in_buf 和 out_buf 字段,这两个字段分别指向系统输入缓冲区和系统输出缓冲区。 上面的示例通过访问系统的输入缓冲区来打印每个记录。

直接处理系统缓冲区可提高处理非常长的记录时的性能。 在使用系统间通信功能 (ICF) 文件时,它还提供了显着的性能改进。 通常,您只需要访问 ICF 文件中的最后几个字节,而不需要访问记录中的所有其他数据。 通过直接使用系统缓冲区,无需复制未用于 ICF 文件的数据。

系统缓冲区应始终通过位于 <recio.h> 头文件中的 _RFILE 结构中的 in_bufout_buf 指针进行访问。 如果未通过 in_bufout_buf 指针访问系统缓冲区,那么会发生不可预测的结果。