FREAD - Linux手册页
时间:2019-08-20 18:00:22 来源:igfitidea点击:
Linux程序员手册 第3部分
更新日期: 2020-08-13
名称
fread,fwrite-二进制流输入/输出
语法
#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);
说明
函数fread()从stream指向的流读取nmemb数据项,每个数据项的大小为字节长,并将其存储在ptr给定的位置。
函数fwrite()将nmemb数据项(每个大小为字节)写入stream所指向的流,并从ptr给定的位置获取它们。
有关非锁定对象,请参见unlocked_stdio(3)。
返回值
成功时,fread()和fwrite()返回读取或写入的项目数。此数字等于仅在size为1时传输的字节数。如果发生错误或到达文件末尾,则返回值为短项计数(或零)。
流的文件位置指示符前移成功读取或写入的字节数。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
fread(),fwrite() | Thread safety | MT-Safe |
遵循规范
POSIX.1-2001,POSIX.1-2008,C89。
示例
下面的程序通过以二进制模式解析/ 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); }
另外参见
read(2),write(2),feof(3),ferror(3),unlocked_stdio(3)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。