标准库I/O提供了三种缓冲类型:全缓冲,行缓冲,无缓冲
标准IO缓冲类型 | 何处使用 | |
---|---|---|
全缓冲 | 当划出的被填满或者数据读取至末尾时,执行IO操作 | 磁盘文件的读写 |
行缓冲 | 当输入输出过程遇到换行符“\n” 或者分配的缓冲区已满,则执行IO操作 | 涉及终端的读写操作如sdin/stout |
无缓冲 | 当有数据产生时,立刻由相应设备进行处理 | 一般stderr使用无缓冲,不代表系统不缓存 |
标准输入缓冲区stdin使用行缓冲的方式存储输入(接收写入设备的数据存到缓冲区中),用户存入的数据先存在临时缓冲区中,当用户键入回车或者分配的缓冲区满了之后,再执行IO操作,将数据由临时缓冲区拷贝到stdin中,比如说C语言中提供的scanf和getchar等函数就是从上述的缓冲区中读取数据
缓冲区就好像一个有大小的队列,从外界设备键入数据,将这个数据按顺序放入这个队列,然后使用getchar等函数将这个数据依次读取,(注意:因为getchar函数是读取一个字符,所以如果用户一次键入了很多数据,后面再调用getchar函数就会从缓冲区中直接读取,不需要再等待用户键入数据,直到缓冲区中的数据读取完毕)
scanf与getchar等函数会在stdin中读取数据,如果缓冲区中存在数据则直接从缓冲区中读取数据
,如果上述缓冲区为空,则将上述函数挂起,等待数据缓冲完成(键入回车或