当前位置: 首页 > article >正文

文件I/O操作:C语言

一、铺垫

1.由于篇幅问题我会从C语言、C++、Linux、Qt这四个方面来讲述部分文件I/O操作;只针对于本地部分,网络部分的I/O在原理上和这部分大同小异

2.我在1年之内、重学一些东西,新学一些东西;当实践(做开源项目)的时候,仍旧是一问三不知;当我重新读官方文档的时候,豁然开朗;

3.文件I/O操作,所用的都是Linux的那一套基础核心理论,第一层的封装是C语言或C++;因为他俩在同一层上,只不过封装的实现操作不同,而且C++使用起来比C语言更简单,但是C语言的函数更有操作性,层次性,一步一步来;让程序员的理解一步步加深;

4.如果向深挖;就要学习C语言和C++的官网的参考文档和库文件;因为每一次查看,都有不同的感受;

二、C语言

1.上方图片是官网的截图,以上的标记;其实官网已经为我们程序员分好类型;直接使用就可以;文件的I/O就是使用File access这一部分就可以;

2.现在可以使用的就是fclose和fopen这两个函数;

1.fopen()函数

FILE * fopen ( const char * filename, const char * mode )

阐述读取文件的过程:单纯的从C语言上讲,磁盘上的数据文件内容是先被内存读取,我们程序创建一个变量(char[]字符串类型),把读出来的数据赋予这个变量;这样我们就实现了读取文件内容;磁盘上的数据文件先被内存读取,指的就是文件缓冲区先读取数据;这也是对冯诺伊曼体系结构的实现;

返回值FILE*  :从C语言的角度来讲,返回值类型是一个文件类型指针:其实他是一个结构体重命名;里面定义了各种变量,用来维护文件缓冲区里的各种数据;实现程序和数据文件的交互的控制

返回值

若成功,返回一个文件类型的指针

若失败,返回一个空指针(nullptr),则会根据系统,返回特定的一个错误代码

参数

const char * filename:绝对路径+文件名    或  相对路径 +文件名

const char * mode:文件打开类型,是要读还是写;是二进制读,还是二进制写

2.fclose()函数

int fclose ( FILE * stream )
 返回值

若成功:返回0

若失败:返回错误码EOF(int类型的宏定义,通常是-1)

参数

文件类型的指针,比如说fopen()打开文件的返回值,就是文件类型的指针

3.fflush()函数:

解释:刷新文件缓冲区,文件缓冲区有自己的运行规则;使用此函数就是推一下文件缓冲区,让他赶紧把未完成的工作,立刻完成;主要是将未写入文件的内容写入到文件中,未打印的文字,打印出来;

int fflush ( FILE * stream )
返回值

若成功:返回0

若失败:返回EOF(-1),并且设置错误码;

参数

FILE * stream:文件类型的指针(用户想要刷新哪个流,就把哪个指针放进去)

4.printf()/sprintf()/fprintf()函数

1)printf()函数
int printf ( const char * format, ... )  //将格式化数据送给标准输出流(显示器)
返回值

如果成功则返回参数format中,所有字符的个数;

参数

const char * format:一个将要被写入标准输出流的字符串(包含文本信息),格式见官方文档;

2)sprintf()函数

int sprintf ( char * str, const char * format, ... )  //将格式化数据写入字符串
返回值

如果成功则返回参数format中,所有字符的个数;

参数

const char * format:一个要被写入str字符数串的字符串;见printf()函数,理解意思(真不好翻译);

char * str:字符串

3)fprintf()函数
int fprintf ( FILE * stream, const char * format, ... ) //将格式化数据写入文件流
返回值

如果成功则返回参数format中,所有字符的个数;

参数

const char * format:一个要被写入文件流的字符串;见printf()函数,理解意思(真不好翻译);

FILE * stream:文件类型的指针;

5.scanf()/sscanf()/fscanf()函数

1).scanf()函数

注:这三个函数,和printf()函数有异曲同工之妙,只不过一个是输入一个是输出,这里只讲一个

int scanf ( const char * format, ... )  //从标准输入流中读取格式化数据;
返回值

如果成功则返回参数format中,所有字符的个数;

参数

const char * format:一个从标准输入流中提取出来的字符串;

6.fread()函数

将文件中的数据读取到ptr中;

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream )
返回值

将实际读到的字符串中字符的个数返回

参数

void * ptr:将读到的数据,写入到ptr中

size_t size:每一个元素的大小

size_t count:预想中,有多少个元素

FILE * stream:文件类型指针——要读的文件;

7.fwrite()函数

将ptr中的数据写入到文件中

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream )
返回值

将实际写入的字符串中字符的个数返回

参数

void * ptr:将要写入的字符串数据,传进去

size_t size:每一个元素的大小

size_t count:预想中,有多少个元素

FILE * stream:文件类型指针——要写的文件;

8.其他函数

像其他函数 fgetc()、fgets()fputc()等;

解释:fgetc()函数:从文件中获取字符;get是获取,put是向文件中写入;

f:file—从文件中

get:获取

c:character—字符

只不过需要大家;多多查看官方文档学习;

注:其实这写的,官方文档都有,只是必须要写几遍,实际操演几遍,否则就算照着文档看,也是懵的;希望我与大家共勉


http://www.kler.cn/a/447543.html

相关文章:

  • 新版国标GB28181设备端Android版EasyGBD支持国标GB28181-2022,支持语音对讲,支持位置上报,开源在Github
  • 摩尔信使MThings的逻辑控制功能范例
  • 冯诺依曼架构与哈佛架构的对比与应用
  • Vue(二)
  • 【Maven】dependencyManagement依赖版本管理
  • linux zip unzip 命令的使用
  • 纯血鸿蒙APP实战开发——Text实现部分文本高亮和超链接样式
  • el-tabs标签过多
  • TCP与UDP的端口连通性
  • Ubuntu22.04安装CH340/CH341驱动
  • Python自动化测试图片比对算法
  • 电商项目-网站首页高可用(二)
  • 常用数据库类型介绍
  • 从 Vue 迈向 React:平滑过渡与关键注意点全解析
  • 翻转(蓝桥杯2023大学C组试题E)
  • 力扣274. H 指数
  • 【八大排序(二)】希尔排序
  • 5_HTML5 SVG (1) --[HTML5 API 学习之旅]
  • 深入理解贪心算法:核心概念与实践
  • 类的动态演绎:程序运行中的生命绽放
  • 多模态医学图像融合概述
  • windows C#-静态构造函数
  • 计算机网络之多路转接epoll
  • bestphp‘s revenge
  • linux内核网络分层概述
  • Vue中<script setup></script>的主要语法元素和特性