IO缓冲区

2021-11-08  本文已影响0人  lxr_

//为了解决cpu与输入输出(键盘、显示器)设备速度不匹配的问题,设计了IO缓冲区
//标准IO提供三种类型缓冲模式:按块缓存,按行缓存和不缓存
//按块缓存也称为全缓存,即在填满缓冲区后才进行实际的设备读写操作
//按行缓存是指在接收到换行符"\n"之前,数据都是先缓存在缓冲区的
//不缓存,就是允许直接读写设备上的数据

#include <stdio.h>
#include <string.h>

int main(int argc, char** argv)
{
    FILE* fp;
    
    if ((fp = fopen("output.txt", "w")) == NULL)
    {
        perror("打开文件失败的原因是");
    }

    fputs("hello world\n", fp);                 //向文件写入字符串
    getchar();                                  //从终端等待用户输入一个字符,如果用户没有输入而中断程序,fputs写入不会成功,因为先写入了缓冲区

    fclose(fp);                                 //调用fclose函数将缓冲区数据写入文件

    //****************fflush(刷新缓冲区)与setvbuf(设置缓冲区模式)**************
    //下面的例子在linux下可以测试成功,在windows测试不成功
    char buff[1024];
    memset(buff, '\0', sizeof(buff));           //缓冲区填充

    setvbuf(stdout, buff, _IOFBF, 1024);        //设置stdout数据流的缓冲区为buff,大小为1024,缓冲模式为按块缓存,而_IOLBF为按行缓存,_IONBF为不缓存

    fprintf(stdout, "hhhhh");                   //向stdout写入字符串

    fflush(stdout);                             //刷新缓冲区

    fprintf(stdout, "输入任意字符后才会显示改行字符\n");//再往stdout写入数据,而当缓冲模式设置为无缓冲时,不用用户输入字符,该行会先输出到终端
     
    getchar();                                  //从终端接收用户一个输入字符

    system("pause");
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读