知识点回顾
一、C语言篇
二、数据结构篇
三、IO篇
1、标准IO
1.1、什么是标准IO?
将指定的数据写入指定文件中的操作,就是标准IO做的事
通过文件指针FILE*去访问指定的文件
1.2、如何让一个文件指针指向一个文件?
通过fopen函数
#include <stdio.h>
int main()
{
FILE *fp = fopen("./hello.txt","w"); // 以只写的方式打开文件,没有则创建并打开
if(fp == NULL)
{
perror("fopen is error");
return -1;
}
fclose(fp);
return 0;
}
1.3、三个特殊的文件流指针
stdin、stdout、stderr
这三个都是FILE*类型的
特殊在:这3个文件流指针不需要我们手动打开,每一个程序天生就有
stdin:指向终端的输入流(就是scanf使用的流指针)
stdout:指向终端的输出流(就是printf使用的流指针)
stderr:指向终端的错误流(perror)
1.4、什么是标准错误流?
标准错误流本质上就是一种输出流
默认的错误流,还是输出到终端
错误流的存在意义:仅仅为了区分标准输出流,标准输出流输出到终端,标准错误流通过一系列的手段,输出到"错误日志",将来查看错误信息的话,直接查看错误日志就行了
1.5、文件读写
fputc、fgetc、fputs、fgets、fprintf、fscanf、fwrite、fread等
1.6、文件流指针便宜函数
fseek:用来实现文件的光标定位问题
1.7、文件流和数据流
文件流:
所有类型的数据,都会转换成字符串类型,再保存到文件中去
数据流:
任意数据,都会以数据本身的二进制形式保存到文件中去
所有操作系统使用的文件编码格式导致一个效果:
除了字符和字符串,他们的二进制数据是本身之外,其他所有数据我们是看不懂的
注意:fwrite和fread都是数据流,要配合使用
2、文件IO
2.1、什么是缓存区?
为了提高IO的运行效率,将多次准备写入文件的数据,先逐一写入一段内存进行打包,然后将这段内存的数据统一写入文件中
这样就可以大量减少文件的打开和关闭操作
2.2、缓存区什么时候刷新?
2.2.1、行缓存(printf用的就是行缓存)
一定是指向终端的stdout,就是行缓存
行缓存大小为:1024字节
① 遇到回车刷新
② 缓存区满刷新
③ 程序结束后刷新
④ 文件关闭缓存刷新
⑤ IO切换缓存刷新
⑥ fflush(stdout) 手动刷新
2.2.2、全缓存
通过fopen打开的指向文件FILE*指针,都是全缓存
无缓存大小为:4096字节
除了遇到回车不刷新,其他的都和行缓存的刷新规则一样
2.2.3、无缓存
标准错误流都是无缓存
2.3、scanf的缓存区?
scanf实际上不是从终端直接读取数据,而是从缓存区读取数据的
每一个scanf后面,必须跟上一个 while(getchar()!=10);
原因?