标准io是另一套io接口
数据流
先说一下流的概念
一般流可以分为 文本流 与 二进制流
文件指针
在一个文件打开时
在标准io中
分别是:
stdin对应的是标准输入设备
stdout对应的是标准输出设备
stderr对应的是标准错误输出设备
上面对应的文件描述符分别为0,1,2
我们常用的printf函数其实是默认为stdout为流对象
1 | int fprintf(FILE *stream, const char *format, …); |
比如我想在屏幕上输出一个hello linux
fprintf(stdout,"hello linux");
上面这句话如果在单语句执行的时候是没有什么问题的
1 | fprintf(stdout,"hello linux"); |
那么就输出不了这句话
上面说过标准io自带缓存区
1.全缓存:等缓存区的数据占满以后再进行系统调用
2.行缓存:等缓存区的数据占满一行后进入io操作(stdout就是行缓存)
3.不缓存:来什么数据我就进行io操作(stderr就是不缓存
所以上面的数据默认fprintf的数据没有占满一行
1.后面加一个 \n
2.用fflush强制刷新缓存
3.把流对象换成stderr
一般情况下,程序在结束时会 自动刷新缓冲区,但是当程序还未结束时,刷新缓冲区则需要调用 fflush() 函数
1 | int fflush(FILE *stream); |