行缓冲了解

1.回车与换行

在电视上大家应该看到过,有人用一种打字机打字,那是计算机未出现前的产品。但它存在一个缺陷,在打完一行换行的时候,需要0.2秒的时间,但是这0.2秒可以打两个字符,如果这0.2秒内有新的字符传入,那么该字符会丢失。
于是打字机的研发人员便想了办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做”回车”,告诉打字机把打印头定位在左边界;另一个叫做”换行”,告诉打字机把纸向下移一行。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有”<换行>”,Windows系统里面,每行结尾是”回车换行”,;Mac系统里,每行结尾是”回车”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号

注:回车与换行的来历摘自网上

2.行缓冲的引入

1)首先先看三段代码
a.下面代码的执行现象为:hello立刻显示,并且回车换行,3秒后程序执行结束。

#include<stdio.h>
#include<unistd.h>
int main()
{
   printf("hello\n");
   sleep(3);
   return 0;
}

在这里插入图片描述
b.下面代码的执行现象为:开始没有显示,3秒后hello显示,但是没有回车

 #include   <stdio.h>
    #include<unistd.h>
    int main()
    {
       printf("hello");
       sleep(3);
       return 0;
    }

在这里插入图片描述
c.下面代码的执行现象为:hello直接显示,3秒后程序结束没有回车

#include   <stdio.h>
#include<unistd.h>
int main()
{
   printf("hello ");
   fflush(stdout);
   sleep(3);
   return 0;
}

在这里插入图片描述
2)行缓冲的概念

C语言如printf默认输出时,将消息标准输出到显示器,首先是将数据写入输出缓冲区,碰到“\n”才输出到屏幕上,(C中\n是回车换行,而\r是换行)而该缓冲区是行缓冲区。
行缓冲区刷新数据是按行刷新的。标准输入和标准输出都是行缓存。上述b例子中,程序没有遇到换行符便没有立刻将hello输出,在程序结束时会自动刷新缓冲区,hello便输出;而c例子中使用了fflush函数,fflush()会将缓冲区内的数据刷新

发布了99 篇原创文章 · 获赞 63 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览