遵循规范

POSIX.1-2001,POSIX.1-2008,C89。

说明

函数fread()从stream指向的流读取nmemb数据项,每个数据项的大小为字节长,并将其存储在ptr给定的位置。

函数fwrite()将nmemb数据项(每个大小为字节)写入stream所指向的流,并从ptr给定的位置获取它们。

有关非锁定对象,请参见unlocked_stdio(3)。

语法

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb,
              FILE *stream);

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
fread(),fwrite()Thread safetyMT-Safe

返回值

成功时,fread()和fwrite()返回读取或写入的项目数。此数字等于仅在size为1时传输的字节数。如果发生错误或到达文件末尾,则返回值为短项计数(或零)。

流的文件位置指示符前移成功读取或写入的字节数。

fread()不能区分文件结束和错误,调用者必须使用feof(3)和ferror(3)来确定发生了什么。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

另外参见

read(2),write(2),feof(3),ferror(3),unlocked_stdio(3)

FREAD - Linux手册页

Linux程序员手册 第3部分
更新日期: 2020-08-13

名称

fread,fwrite-二进制流输入/输出

示例

下面的程序通过以二进制模式解析/ bin / sh ELF可执行文件并打印其魔术和类来演示fread()的用法:

$ ./a.out
ELF magic: 0x7f454c46
Class: 0x02

Program source

#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
    FILE *fp = fopen("/bin/sh", "rb");
    if (!fp) {
        perror("fopen");
        return EXIT_FAILURE;
    }

    unsigned char buffer[4];

    size_t ret =
        fread(buffer, sizeof(buffer) / sizeof(*buffer), sizeof(*buffer),
              fp);
    if (ret != sizeof(*buffer)) {
        fprintf(stderr, "fread() failed: %zu\n", ret);
        exit(EXIT_FAILURE);
    }

    printf("ELF magic: %#04x%02x%02x%02x\n", buffer[0], buffer[1],
           buffer[2], buffer[3]);

    ret = fread(buffer, 1, 1, fp);
    if (ret != 1) {
        fprintf(stderr, "fread() failed: %zu\n", ret);
        exit(EXIT_FAILURE);
    }

    printf("Class: %#04x\n", buffer[0]);

    fclose(fp);

    exit(EXIT_SUCCESS);
}
日期:2019-08-20 18:00:24 来源:oir作者:oir