文件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—字符
只不过需要大家;多多查看官方文档学习;