http://bbs.chinaunix.net/thread-588099-1-1.html
与流相关的概念有 缓存区,外设(终端设备,文件)
输入流: 程序从该流读取数据, 数据的流向为 : 从外设到内存 当外设是文件时,是文件输入流,当外设是键盘时,是标准输入流(stdin)
输出流: 程序向该流写入数据,数据的流向为: 从内存到外设 当外设是文件时,是文件输出流,当外设是显示屏时,是标准输出流(stdout)
输出流的缓存-输出缓存: 内存数据写输出到(内存)缓存,当缓存满足一定条件时,才将缓存的数据输出到流相关的外设
输入流的缓存-输入缓存: 按某些规则从外设读取数据到缓存,程序从缓存读取数据
一个流既可以是输入流也可以是输出流,因此可以同时既有输出缓存和输入缓存
注意区分标准输入流(从键盘读入数据)和一般输入流(从文件设备读入数据的区别)
对【一般输入流的读操作】会立即关联到对文件的读操作,数据都准备好了,如果读到文件尾,则会返回EOF。
对【标准输入流的读操作】,表示输入流的源数据是由键盘产生的。 不同与文件中的数据,键盘产生的数据对程序并不是实时可见的(可以设置终端参数,让键盘产生的数据实时可见)。当键盘输入回车(同时‘产生一个\n’字符) 或者 ctrl+D ,表示以上数据可供程序读。程序从键盘读数据的时候,如果数据未满足,则会一直等待键盘提供数据。
实际上,在内存中为每一个数据流开辟一个内存缓冲区,用来存放流中的数据。当用cout和插入运算符“<<”向显示器输出数据时,先将这些数据送到程序中的输出缓冲区保存,直到缓冲区满了或遇到endl 【stdout为行缓冲】,就将缓冲区中的全部数据送到显示器显示出来。在输入时,从键盘输入的数据先放在键盘缓冲区中,当按回车键时,键盘缓冲区中的数据输入到程序中的输入缓冲区,形成cin流,然后用提取运算符“>>”从输入缓冲区中提取数据送给程序中的有关变量。总之,流是与内存缓冲区相对应的,或者说,缓冲区中的数据就是流。
刷新缓存fflush 只定义对输出缓存进行刷新,即将缓存中的数据输出到设备。它并未定义如何操作输入缓存。