我是靠谱客的博主 高贵大雁,最近开发中收集的这篇文章主要介绍行缓冲,全缓冲,无缓冲的详细介绍一.标准IO缓冲区,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.标准IO缓冲区

1.1缓冲区的类型

行缓存:和终端相关的缓冲区就是行缓存 stdin stdout

全缓存: 和文件相关的就是全缓存 fopen打开的文件

不缓存:没有缓冲区 stderr

二.缓冲区的大小

2.2.1行缓存:大小1024

#include <head.h>

int main(int argc, const char* argv[])
{
    int ch;
    对于标准输入行缓存大小验证的时候,必须有输入才有数据
    scanf("%d", &ch);
    printf("size = %ldn", stdin->_IO_buf_end - stdin->_IO_read_base);
     1024

    printf("size = %ldn", stdout->_IO_buf_end - stdout->_IO_read_base);
     1024

    fprintf(stderr,"q121231qweqweqweqweqweqweqwe2");
    printf("size = %ldn", stderr->_IO_buf_end - stderr->_IO_read_base);
    0
    while(1);

    return 0;
}

2.2.2全缓存:大小4096

#include <head.h>

int main(int argc, const char* argv[])
{
    FILE* fp;

    if ((fp = fopen("./tim.txt", "a+")) == NULL)
        PRINT_ERR("fopen error");

    fprintf(fp,"q121231qweqweqweqweqweqweqwe2");
    printf("size = %ldn",fp->_IO_buf_end - fp->_IO_buf_base);
    //4096
    return 0;
}

2.2.3无缓冲:

为0

三.缓冲区的刷新时机

3.1行缓存的刷新时机

#include <head.h>

int main(int argc,const char * argv[])
{
    1.行缓存遇到换行符的时候会刷新缓冲区
     printf("hello worldn");
     while(1);
    
    2程序结束的时候行缓存也会被刷新
     printf("helloworld");

    3.当输入和输出切换的时候也会刷新缓冲区
     int ch;
     printf("helloworld");
     scanf("%d",&ch);
     while(1);

    4.当关闭文件描述符的时候也会刷新缓冲区
     printf("helloworld");
     fclose(stdout);
     while(1);

    5.调用fflush主动刷新缓冲区
     printf("helloworld");
     fflush(stdout);
     while(1);

    6.当缓冲区满也会刷新缓冲区
    int i;
    for(i=0;i<1028;i++){
        fputc('a',stdout);
    }
    while(1);
    return 0;
}

3.2全缓存的刷新时机:

#include <head.h>

int main(int argc,const char * argv[])
{
    FILE *fp;

    if ((fp = fopen("./hello.txt", "w")) == NULL)
        PRINT_ERR("fopen error");

    1.换行符不会刷新全缓存
    fprintf(fp,"hello worldn");
     while(1);
    
    2.程序结束的时候全缓存也会被刷新
     fprintf(fp,"hello world");

    3.当输入和输出切换的时候也会刷新全缓冲区
     int ch;
     fprintf(fp,"hello worldn");
     ch = fgetc(fp);
     while(1);

    4.当关闭文件描述符的时候也会刷新全缓冲区
     printf(fp,"hello worldn");
     fclose(fp);
     while(1);

    5.调用fflush主动刷新全缓冲区
     fprintf(fp,"hello worldn");
     fflush(fp);
     while(1);

    6.当缓冲区满也会刷新全缓冲区
    int i;
    for(i=0;i<4097;i++){
        fputc('a',fp);
    }
    while(1);
    return 0;
}

最后

以上就是高贵大雁为你收集整理的行缓冲,全缓冲,无缓冲的详细介绍一.标准IO缓冲区的全部内容,希望文章能够帮你解决行缓冲,全缓冲,无缓冲的详细介绍一.标准IO缓冲区所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部