文章目录

  • 1.函数定义及原型
  • 2.函数功能
  • 3.函数示例

1.函数定义及原型

#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);

参数说明

参数 说明
ptr 读取或写入的数据存放的内存的指针(因为是void型,所以它可以是数组,也可以是新开辟的空间,buffer就是一个索引)
size 每次读取或写入的字节数
nmemb 读取或写入的次数
stream 要读取或写入的文件的指针

2.函数功能

函数 说明 备注
fread 函数 fread() 从 stream 指向的流中读取 nmemb 个数据项,每个 size 字节长,并将它们存储在 ptr 给定的位置。 Thread safety(线程安全)
fwrite 函数 fwrite() 将 nmemb 个数据项(每个 size 字节长)写入 stream 指向的流,从 ptr 给出的位置获取它们。 Thread safety(线程安全)

返回值

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

扩展
1.文件读取方式:二进制方式和字符方式
2.fread可以读二进制文件,有时用字符方式去读文件不能读完整个文件,因为字符方式用特定的标记结尾的,读取时只要碰到该标记就自动结束。但咱们可以使用二进制方式。
注意:fread() 不区分文件结尾和错误,调用者必须使用 feof(3) 和 ferror(3) 来确定发生了什么!

3.函数示例

//fwrite_fread.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(void)
{FILE *fp;int size = 0;char *freadbuf;char *writebuf = "This is my test about fwrite!\n";fp = fopen("test","rwb+");if(NULL == fp) {printf("Error:Open input.c file fail!\n");return -1;}if(ferror(fp))printf("Error to read the file\n");fseek(fp, 0, SEEK_END);size = ftell(fp);rewind(fp);freadbuf = (char*)malloc(sizeof(char)*size);fread(freadbuf,1,size,fp);printf("%s",freadbuf);printf("Press any key to fwrite:%s",writebuf);fseek(fp, size, SEEK_END);fwrite(writebuf,1,strlen(writebuf),fp);fclose(fp);free(freadbuf);return 0;
}

执行步骤

vi fwrite_fread.c
gcc fwrite_fread.c -o fwrite_fread
echo 12345678 > test
cat test
./fwrite_fread
cat test

结果如下

【fread/fwrite】C语言API之fread/fwrite函数详解相关推荐

  1. c++ memset 语言_C/C++ 中memset() 函数详解及其作用介绍

    memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, si ...

  2. 【C语言学习笔记】SWAP函数详解

    SWAP函数详解 本篇文章通过swap函数来深入了解C语言中函数的用法,与指针的应用.参考资料来源于经典书籍与技术博客的分享. 在复习完生存期相关的知识点后(详情可转至此处),初步认识了函数与本地变量 ...

  3. C++语言篇 第九章 自定义函数详解

    序言 一个 C++ 程序无论大小,都由一个或者多个函数组成,而且其中必须有且只有一个函数main(),称之为"主函数". 由函数 main()调用其他函数来完成程序的特定功能.当然 ...

  4. C语言网络编程:bind函数详解

    文章目录 函数功能 函数头文件 函数使用 函数参数 函数举例 为什么需要bind函数 服务器如何知道客户端的ip和端口号 htons函数 `htons`兄弟函数`htonl`,`ntohs`,`nto ...

  5. scanf 接收 空格 输入_【C语言】- printf 和scanf 函数详解!

    一.printf函数 这是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据. 1.用法 1> p ...

  6. C语言学习11:strlen()函数详解

    目录 1.strlen()函数功能 2.strlen()函数的使用 2.1 数组 3.注意事项 1.strlen()函数功能 strlen()函数 用于 计算 指定字符串的 长度,但 不包括 结束字符 ...

  7. C语言网络编程:listen函数详解

    文章目录 前言 函数描述 代码实例 TCP服务器为什么调用listen 前言 根据TCP编程模型中我们可以看到之前的socket和bind接口是tcp服务器在为接收客户端的链接做准备,保证tcp的面向 ...

  8. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

  9. c语言c++语言中静态变量,函数详解

    静态变量,静态函数对于一些c,c++的初学者来说,造成了不少的困扰.昨晚和寝室的室友讨论到这 个问题,想了一下,作了一下总结: 虽然说c和c++在很多人的眼里就是孪生姐妹,其实还是有很大区别的.在这里 ...

  10. 【C语言】qsort()函数详解

    前言: 作者简介:爱吃大白菜1132 人生格言:纸上得来终觉浅,绝知此事要躬行   如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步!   如果觉得博主文章还不错的话,希望三连支持! 目录 ...

最新文章

  1. TOJ--3456--数学题
  2. 2017国二java题库,2017全国计算机二级考试JAVA考试题库
  3. 证券一哥炼成记——郭树清
  4. Spring集成文件轮询和测试
  5. gcc: internal compiler error: Killed (program cci)错误
  6. spark两种kafka偏移量维护方式
  7. 使用springmvc时处理404的方法
  8. linux select函数用法
  9. 海康、大华NVR网络硬盘录像机录像无插件全平台访问实现—录像回放时间轴功能实现方法
  10. Linux计划任务写入保存命令
  11. zookeeper指北
  12. 京东产品上架如何批量上传商品素材?
  13. XMind 2022 for Mac(思维导图软件)V12.0.3中文免费版
  14. 微信小程序微信授权登录,使用getPhoneNumber()部分手机无法获取动态令牌code(Taro)
  15. php路由固件升级提示,【2017年整理】路由器固件修改教程(个人理解)-无线路由区-中国无线论坛 -.doc...
  16. C#中转义字符\r, \n, \r\n, \t, \b, @作用
  17. ev3 编程中各程序块之间的关联
  18. Python基础知识回顾
  19. 大数据,why python
  20. 计算机工作理想湿度,计算机理想的工作温度七月的盛夏,碧空中没有一丝云彩,只剩下纯(11)...

热门文章

  1. [20071016]WindowsXP优化
  2. Matlab中IFFT/FFT注意事项及在OFDM仿真中的应用问题
  3. Shiro学习(6)Realm整合
  4. Protected or Private?
  5. json to go
  6. 数加加众包实习生招募进行中
  7. pandas之dropna()的用法
  8. Nginx的负载均衡 - 最少连接 (least_conn)
  9. 具有超能力的对话式机器人性能如何? #Chatsonic AI
  10. STM32——中断优先级分组