【fread/fwrite】C语言API之fread/fwrite函数详解
文章目录
- 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(线程安全) |
返回值:
- 成功:fread() 和 fwrite() 返回读取或写入的项目数,此数字等于仅当 size 为 1 时传输的字节数;
- 失败:如果发生错误或到达文件末尾,则返回值是一个短项计数(或零)。
扩展:
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函数详解相关推荐
- c++ memset 语言_C/C++ 中memset() 函数详解及其作用介绍
memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, si ...
- 【C语言学习笔记】SWAP函数详解
SWAP函数详解 本篇文章通过swap函数来深入了解C语言中函数的用法,与指针的应用.参考资料来源于经典书籍与技术博客的分享. 在复习完生存期相关的知识点后(详情可转至此处),初步认识了函数与本地变量 ...
- C++语言篇 第九章 自定义函数详解
序言 一个 C++ 程序无论大小,都由一个或者多个函数组成,而且其中必须有且只有一个函数main(),称之为"主函数". 由函数 main()调用其他函数来完成程序的特定功能.当然 ...
- C语言网络编程:bind函数详解
文章目录 函数功能 函数头文件 函数使用 函数参数 函数举例 为什么需要bind函数 服务器如何知道客户端的ip和端口号 htons函数 `htons`兄弟函数`htonl`,`ntohs`,`nto ...
- scanf 接收 空格 输入_【C语言】- printf 和scanf 函数详解!
一.printf函数 这是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据. 1.用法 1> p ...
- C语言学习11:strlen()函数详解
目录 1.strlen()函数功能 2.strlen()函数的使用 2.1 数组 3.注意事项 1.strlen()函数功能 strlen()函数 用于 计算 指定字符串的 长度,但 不包括 结束字符 ...
- C语言网络编程:listen函数详解
文章目录 前言 函数描述 代码实例 TCP服务器为什么调用listen 前言 根据TCP编程模型中我们可以看到之前的socket和bind接口是tcp服务器在为接收客户端的链接做准备,保证tcp的面向 ...
- C语言网络编程:accept函数详解
文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...
- c语言c++语言中静态变量,函数详解
静态变量,静态函数对于一些c,c++的初学者来说,造成了不少的困扰.昨晚和寝室的室友讨论到这 个问题,想了一下,作了一下总结: 虽然说c和c++在很多人的眼里就是孪生姐妹,其实还是有很大区别的.在这里 ...
- 【C语言】qsort()函数详解
前言: 作者简介:爱吃大白菜1132 人生格言:纸上得来终觉浅,绝知此事要躬行 如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步! 如果觉得博主文章还不错的话,希望三连支持! 目录 ...
最新文章
- TOJ--3456--数学题
- 2017国二java题库,2017全国计算机二级考试JAVA考试题库
- 证券一哥炼成记——郭树清
- Spring集成文件轮询和测试
- gcc: internal compiler error: Killed (program cci)错误
- spark两种kafka偏移量维护方式
- 使用springmvc时处理404的方法
- linux select函数用法
- 海康、大华NVR网络硬盘录像机录像无插件全平台访问实现—录像回放时间轴功能实现方法
- Linux计划任务写入保存命令
- zookeeper指北
- 京东产品上架如何批量上传商品素材?
- XMind 2022 for Mac(思维导图软件)V12.0.3中文免费版
- 微信小程序微信授权登录,使用getPhoneNumber()部分手机无法获取动态令牌code(Taro)
- php路由固件升级提示,【2017年整理】路由器固件修改教程(个人理解)-无线路由区-中国无线论坛 -.doc...
- C#中转义字符\r, \n, \r\n, \t, \b, @作用
- ev3 编程中各程序块之间的关联
- Python基础知识回顾
- 大数据,why python
- 计算机工作理想湿度,计算机理想的工作温度七月的盛夏,碧空中没有一丝云彩,只剩下纯(11)...