使用setvbuf判断stdout缓冲类型(猜想)

本文通过在MacOS环境下使用VSCode进行实验,展示了不同setvbuf类型对stdout缓冲效果,解释了如何通过观察输出变化判断缓冲策略,并揭示了触发缓冲刷新的条件。实验中特别关注了_IONBF类型的结果。
摘要由CSDN通过智能技术生成

通过比较使用不同类型的setvbuf函数与不使用此函数得出的结果可以判断系统和编译器的stdout的缓冲类型(新手的猜想).

运行环境:macos Monterey 12.0.1, VScode1.63

    char buf[1024];
    setvbuf(stdout,buf,int,1024);
    printf("a\n");
    while(1);

1.注释前两行,得到结果:输出“a”

2.不注释前两行,setvbuf使用_IOFBF类型,得到结果:无输出

3.不注释前两行,setvbuf使用_IOLBF类型,得到结果:输出“a”

//4.不注释前两行,setvbuf使用_IONBF类型,得到结果:输出“a”

下列情况会引发缓冲区的刷新:

  1. 缓冲区满时;

  2. 执行fflush函数;

  3. 正常关闭文件。

  4. 正常退出程序或进程。

  5. 行缓冲遇到 \n刷新。

所以在程序最后加上while(1),来避免程序结束对试验结果的影响.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值