printf()刷新缓冲区的问题与exit()/_exit()退出的问题

1.遇到“\n”,立即刷新缓冲区。
2.程序调用fflush函数刷新缓冲区
3.程序以exit结束,缓冲区会刷新。如果以_exit结束,缓冲区数据会被直接清空。
4.缓冲区满,也会将缓冲区数据刷新出来。
5.程序结束后,缓冲区被打印
6.输出缓冲区的大小是1024个字节

简而言之,输出缓冲区呢,时一个有头有尾的数组,遇到换行符 或者 满的时候,程序正常退出的时候,会被打印出来

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

测试printf()的缓冲区的大小

#include <stdio.h>
#include<unistd.h>
int main()
{
    
    for(int i = 0 ;i<1025 ;i++)  //此时可以立即打印 改成1024时 不能立即打印
    {
        printf("a");
    }
    sleep(10);
    return 0;
}

使用exit()在进程退出之前会做两个动作

1、调用退出处理函数

2、清理I/O缓冲
_exit() 不会进行两个动作,尽快退出程序后,才会清空缓冲区

#include <stdio.h>
#include<unistd.h>
#include<stdlib.h>
void print();
int main()
{
    atexit(print);
    printf("Hello world");
    _exit(19);
    return 0;
}

void print()
{
    printf("hello world\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值