本期介绍❤
主要介绍:程序中“流”的概念,“流”的作用,C语言中的默认打开的标准流:stdin stdout stderr。
———————————————————————————————————————————
流和标准流
流
上一章我们讲解了文件操作,就是将内存中的数据输出到文件(硬盘),或从文件(硬盘)中获取数据放到内存中。其中硬盘就是一个外部设备,同理我们也可以将数据发送到其他外部设备,例如:屏幕,U盘,网络......
每一种外部设备的读取数据都是有差距的,所以作为程序员,需要掌握多种外部设备显然难度太大,因此我们引入了流。
程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。
这样程序员在输入输出数据时不需要关心外部设备了,只需要将数据与流相连,C语言底层已经将流向不同外部设备的输入和输出实现好了,不需要我们关心。
我们只需要从流里读取数据,向流里写数据。
流根据方向分为两种:数据向外流成为输出流,数据向内存流的称为输入流。
C程序针对文件、画面、键盘等的数据输入输出操作都是通过流操作的。
一般情况下,我们要想向流里写数据,或者从流中读取数据,都是要打开流,然后操作。
标准流
那为什么我们从键盘输入数据,向屏幕上输出数据,并没有打开流呢?
那是因为C语言程序在启动时已经将标准流(standard stream)准备好了。
默认打开了3个流:
stdin-标准输入流,在大多数的环境中从键盘输入,
scanf函数就是从stdin-标准输入流(键盘)中读取数据。
stdout-标准输出流,大多数的环境中输出至显示器界面,
printf函数就是将信息输出到stdout-标准输出流(屏幕)中。
stderr-标准错误流,大多数环境中输出到显示器界面。
这是默认打开了这三个流,我们使用scanf、printf等函数就可以直接进行输入输出操作的。
stdin、 stdout、 stderr 三个流的类型是: FILE*,通常称为文件指针。
C语言中,就是通过 FILE*的文件指针来维护流的各种操作的。
例如:字符输出函数fputc的第二个参数FILE* stream就是流。如果stream是文件指针,则该字符就输出到文件中,如果stream是stdout,则输出到屏幕上。
#include<stdio.h>
int main()
{
FILE * pf = fopen("data.txt","w");
fputc('h', pf);//输出到文件中
fputc('h',stdout);//输出到屏幕
fputc('e', stdout);//输出到屏幕
fputc('l', stdout);//输出到屏幕
fputc('l', stdout);//输出到屏幕
fputc('o', stdout);//输出到屏幕
fclose(pf);
pf = NULL;
return 0;
}
运行结果:
文件中
屏幕上
其他文件操作可以看我的上一篇博客,
欢迎订阅“从进门到进厂”专栏,会持续更新C语言C++及数据库的干货❤
这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助❤
欢迎各位点赞,收藏和关注哦❤
如果有疑问或有不同见解,欢迎在评论区留言❤