关于“流”,“缓冲区”的浅理解

关于“I/O流”,“缓冲区”的浅理解

大家好!我是你们的新朋友,童无敌!这是我的第一篇博文,主要是想分享一些自己对C/C++的浅层次的认识与见解,与广大的爱好技术的同志们进行友好的交流,从而增长知识,开拓视野,成长自己。由于本人才疏学浅,如果有对技术理解的不准确或者不到位的地方,还望各位大佬垂训,指正哦!我无敌在这里先谢谢大家了!嘻嘻… …
我们言归正传!关于计算机的I/O流我们可以这样理解:我们可以想象在计算机里有一段通道,可以想象成是类似于管道的那种,这段管道右侧为起始点,左侧为终点,这个管道分为三部分,依次是右侧部分,中间部分,左侧部分。右侧部分为输入缓冲区,中间部分就是程序部分,左侧部分为即为输出缓冲区。在我们从键盘或文件读入数据时(我们可以理解成是在读入一个一个的字符),我们的数据其实是先放在输入缓冲区里的,并不会直接放到程序上去处理。只有当输入缓冲区满时或者读取到换行符 ‘\n’ 时,这时你的计算机OS便会将这些字符一个一个的搬到程序上去处理(这时我们可以想象字符在排成一个有序的单纵队,第一个读取到输入缓冲区的字符则第一个被搬到程序上被处理,之后的字符也是如此)直到输入缓冲区里的最后一个字符被OS搬到程序上为止。这个过程叫做刷新缓冲区。这些搬到程序上的字符会不会全部被处理取决于你的程序,例如在程序上你使用的是getchar()函数读取字符,往一个元素个数为10的字符数组里赋值字符,当程序控制为只能放入字符数组9个字符时,则当你用getchar()函数读取第十个OS从输入缓冲区搬过来的字符时,这时就会造成一个尴尬的局面,也就是这第十个字符没地儿放了,此时如果你不采取任何措施则这个被getchar()函数读取的第十个字符就会被OS无情的丢失,因为第十个字符成为了一个无家可归,无地容身的字符。有一个解决办法就是用ungetc(int ch,FILE*fp)函数将其返回到输入缓冲区里,给这个字符找一个容身之处。在下次读取的时候还可以再次被读取。
在程序里逐个被处理的字符会由OS逐个的写入输出缓冲区里,输出缓冲区也是当输出缓冲区存满,或者当写入换行符 ‘\n’ 时OS才会将输出缓冲区的全部字符逐个输出(刷新缓冲区),具体输出到哪里,这也是根据程序来的。可以输出到显示器,打印机,文件,或者是其他的地方。
如果在某个地方你想用输出函数立刻输出一些东西,但是并没有立刻输出,这可能是因为输出缓冲区并没有存满,或者是输出缓冲区没有遇见 ‘\n’ 。解决办法是在输出语句后跟上这条语句:fflush(stdout); fflush(FILE *fp);函数的功能是强制刷新缓冲区。
好了,同志们,今天关于“I/O流”,“缓冲区”的浅理解,就先说到这里啦!
如果有叙述不充分,或者理解不准确的地方敢请大家在评论区垂训,指正!嘻嘻嘻… …

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值