fread 或 fwrite 子例程

用途

读取和写入二进制文件。

标准 C 库 (libc.a)

语法

#include <stdio.h>
size_t fread (Pointer, Size, NumberOfItems, Stream)
void *Pointer;
size_tSize, NumberOfItems;
FILE *Stream;
size_t fwrite (Pointer, Size, NumberOfItems, Stream)
const void *Pointer;
size_t Size, NumberOfItems;
FILE *Stream;

描述

fread子程序将NumberOfItems参数指定的数据项个数从输入流复制到数组中,数组从Pointer参数指向的位置开始。 每个数据项都具有 *指针格式。

如果从Stream参数指定的输入端读取数据时遇到文件结束(EOF)或错误情况,或者已经复制了NumberOfItems参数指定的数据项数量,fread子程序就会停止复制字节。 此子例程使 参数的文件指针 (如果已定义) 指向最后一个字节读取后的字节。 子例程 弗朗 不会更改 参数的内容。

st_atime字段将通过第一次成功运行 菲格茨费斯弗格特韦克弗格特夫斯弗朗弗斯坎夫盖茨Getchar获取斯坎夫 子例程来标记为更新,该子例程使用的流将返回先前调用 难忘温格特韦克 子例程时未提供的数据。

注: 弗朗 子例程是缓冲的 子例程库调用。 它读取 4KB 块中的数据。 对于大于 4KB的磁带块大小,使用 子例程和 子例程。

子例程将 指针 参数所指向的数组中的项写入 参数所指向的流中。 每个项的大小都由 大小 参数指定。 fwrite子程序会写入NumberOfItems参数指定的项目数。 流的文件位置指示符以成功写入的字节数作为高级值。 如果发生错误,那么该流的文件位置指示符的结果值是不确定的。

子例程将 指针 参数所指向的数组中的项附加到输出流。 fwrite子程序会按照NumberOfItems参数指定的数量追加项目。

如果数据流出现错误,或写入的数据条数达到NumberOfItems参数指定的数目,fwrite子程序将停止写入字节。 子例程不更改 指针 参数所指向的数组的内容。

st_ctimest_mtime在成功运行 子例程与下一次完成对同一流上 弗卢什弗夫关 子例程的调用,下一次对 退出 子例程的调用或下一次对 中止 子例程的调用之间,字段将标记为更新。

参数

描述
POINTER 指向一个数组.
大小 指定由 指针 参数指向的数组的变量类型的大小。 大小 参数可被认为与调用 大小 子例程相同。
NumberOfItems 指定数据项的数目。
指定输入或输出流。

返回值

弗朗 子例程返回实际传输的项的数目。 如果NumberOfItems参数包含 0,则不会传输任何字符,返回值为 0。 如果NumberOfItems参数包含负数,则会转换为正数,因为NumberOfItems参数属于无符号类型。

错误代码

如果由于 I/O 流未缓冲或需要将数据读入 I/O 流的缓冲区而导致 弗朗 子例程不成功,那么它将返回以下一个或多个错误代码:

描述
EAGAIN 指示为 参数指定的文件描述符设置了 O_NONBLOCK 标志,并且该进程将在 弗朗 操作中延迟。
EBADF 指示由 参数指定的文件描述符不是有效的打开文件描述符以进行读取。
EINTR 指示由于接收到信号而终止了读操作,并且未传输任何数据。
注: 根据应用程序绑定到的库例程,此子例程可能会返回 EINTR。 请参阅有关 sa_restart信号 子例程。
描述
EIO 指示该进程是尝试从其控制终端执行读取操作的后台进程组的成员,并且该进程正在忽略或阻止 SIGTTIN 信号,或者该进程组没有父进程。
ENOMEM 指示没有足够的存储空间可用。
ENXIO 指示请求是由不存在的设备发出的。

如果由于 I/O 流未缓冲或需要清空 I/O 流的缓冲区而导致 子例程不成功,那么它将返回下列一个或多个错误代码:

描述
EAGAIN 指示为 Stream 参数指定的文件描述符设置了 O_NONBLOCKO_NDELAY 标志,并且进程在写操作中延迟。
EBADF 指示由 参数指定的文件描述符不是打开的有效文件描述符,无法进行写入。
EFBIG 指示已尝试写入超过进程限制的文件大小或系统范围的最大文件大小的文件。
EINTR 指示写操作因接收到信号而终止,并且未传输任何数据。
EIO 指示该进程是尝试对其控制终端执行写操作的后台进程组的成员,设置了 停止 信号,该进程既未忽略也未阻止 SIGTTOU 信号,并且该进程的进程组是孤立的。
ENOSPC 指示包含该文件的设备上没有剩余的可用空间。
EPIPE 指示尝试写入任何进程未打开以进行读取的管道或先进先出 (FIFO) 进程。 SIGPIPE 信号将发送到该进程。

由于以下错误情况, 子例程也不成功:

描述
ENOMEM 指示没有足够的存储空间可用。
ENXIO 指示请求是由不存在的设备发出的,或者该请求超出了该设备的功能范围。