行缓存和全缓存的缓冲刷新机制

本文详细探讨了行缓存和全缓存在C语言中的工作原理,包括它们的大小、刷新机制。行缓存主要涉及stdin和stdout,全缓存涉及文件操作如fopen。缓冲区的刷新触发条件包括遇到换行符、程序结束、输入输出切换、关闭文件描述符以及手动调用fflush。全缓存的刷新则与缓冲区满、文件关闭和强制刷新有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

行缓存: 和终端相关的缓冲区,stdin stdout
全缓存: 和文件相关的缓冲区  fopen
不缓存,没有缓冲区,stderr;

缓冲区大小
行缓存1k

int main(int argc, const char *argv[])
{
    int ch;
    scanf("%d",&ch);
    printf("size = %ld\n",stdin->_IO_buf_end - stdin->_IO_buf_base);
    printf("size = %ld\n",stdout->_IO_buf_end - stdout->_IO_buf_base);
    fprintf(stderr,"asiajigijasg\n");
    printf("size = %ld\n",stderr->_IO_buf_end - stderr->_IO_buf_base);
    return 0;
}

行缓存缓冲区刷新机制

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

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

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

    //5.主动刷新
    printf("helloworld");
    fflush(stdout);
    while(1);
    return 0;
    
    //6.当缓冲区满会刷新
    int i;
    for (i = 0; i<1025;i++){
        fputc('a',stdout);
    }
    while(1);
}

全缓存刷新机制

int main(int argc, const char *argv[])
{
FILE *fp;
int i = 0;
if((fp = fopen("hello.txt","a+")) == NULL)
    PRINT_ERR("fopen_error");

//缓冲区满刷新
    for(i = 0; i <5000;i++){
fputc('a',fp);
    }
while(1);

//关闭文件刷新
fputc('a',fp);
fclose(fp);
while(1);

//强制刷新
fputc('a',fp);
fflush(fp);
while(1);

//输入输出切换刷新
int in = 0;
fputc('a',fp);
fgetc(fp);
while(1);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值