linux知识点 —— linux printf() 打印丢失问题探讨

本文探讨了Linux环境下使用printf函数时可能出现的内容丢失现象,并通过实例演示如何利用fflush(stdout)解决该问题。

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

linux-知识点 —— printf()函数打印丢失问题探讨


遇到的一个小问题探讨下。

环境前提:
系统环境:ubuntu 16.04 LTS
gcc 版本:gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609

在编程过程中 printf() 用的比较多,常见的有info,warning,err 提醒等,但是在实际编程中,发现偶尔存printf(“…”) 的内容丢失问题。就下面一种较为可能的情况,进行编程探讨:

#include <stdio.h>
#include <unistd.h>

int main()
{
    printf("test printf now...");
    sleep(5);
    printf("\n");
    printf("sleep end...\n");
    return 0;
}

如上,发现打印结果是

test printf now...

睡眠 5s 之后,再打印

sleep end...

由此,证明 “printf()” 函数并非即刻打印的,发现有 “\n” 符号出现时立刻打印。
查阅网友测试资料:https://blog.youkuaiyun.com/heluan123132/article/details/78717862

有如下总结:

(1)标准输出设备stdout,输出一般都有缓冲,当遇到刷新标志或缓冲满时才把缓冲的数据输出到标准输出设备中。 (则如果内容仅输出到缓冲中时,程序被挂起或有别的事件发生,导致程序意外提前退出,有可能造成打印丢失。

(2)对于printf()函数,其使用的输出设备就是标准输出设备stdout,且采用行缓冲式的输出,当printf()遇到\n时,或者缓冲区满时,才会将缓冲区里的内容刷新到标准输出(stdout)。

(3)可以通过 fflush(stdout); ,强制刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。

则编程如:

#include <stdio.h>
#include <unistd.h>

int main()
{

    printf("test printf now...");
    fflush(stdout);
    
    sleep(5);
    printf("\n");
    printf("sleep end...\n");

    return 0;
}

发现,在 sleep(5); 执行前,“test printf now…”, 可以即刻输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值