关于linux下printf函数输出不及时的解决

在linux系统下, printf函数是行缓冲式的输出,当 printf遇到\n时,或者缓冲区满时,才会将缓冲区里的内容刷新到标准输出(stdout).

因此, printf("p"); 等语句的显示不能立刻显示在屏幕上,但是printf("p\n"); 可以.

为了解决这个问题可以通过:fflush(stdout);解决,即变成:
printf("p");
fflush(stdout);
问题可以得到解决.
相对printf,使用fprintf的好处

printf函数的接口如下所示:
int printf( const char *format [, argument]... );
fprintf函数的接口如下所示:
int fprintf( FILE *stream, const char *format [, argument ]...);
从接口可以看出,使用printf函数会更方便些,少了一个函数参数。在通常情况下,的确是这样的。但在输出信息比较多,而且输出的信息有可能需要分类的化,使用fprintf的好处就体现出来了。
printf函数使用的输出设备是标准输出设,即stdout。在使用fprintf函数时,我们可以在第一个参数使用stdout或stderr进行输出信息分类。虽然stdout和stderr在正常情况下都指向标准输出设备,但通常程序运行时的命令行参数,可以分别控制stdout和stderr指向不同的设备或文件。这样,就可以达到对输出信息进行分类控制了。如下面的代码段所示:

test.c
//一般输出信息
extern char *info;
extern char *errinfo;
fprintf(stdout, "%s", info);
//特别关注的输出信息
fprintf(stderr, "%s", errinfo);

这样,在运行程序时,可以使用如下的命令行:
test 1&>1.txt 2&>2.txt
这样,一般输出信息可以存储到1.txt文件中,特别关注的输出信息可以存储到2.txt文件中。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 CubeIDE 中的 printf 函数输出信息时,有可能出现看不到输出信息的情况。这可能是由于以下几个原因造成的: 1. 没有正确配置串口:如果没有正确配置串口,输出信息就无法正确地传输到计算机。需要确保串口的波特率、数据位数、停止位数、奇偶校验位等参数与计算机串口调试助手上的参数一致。另外,需要在代码中调用 HAL_UART_Transmit 函数输出信息发送到串口。 2. 没有调用 fflush 函数:在使用 printf 函数输出信息时,需要调用 fflush(stdout) 函数刷新输出缓冲区,将信息立即输出到串口。如果没有调用 fflush 函数输出信息可能被缓存起来,直到程序结束时才被输出。 3. 串口调试助手上的参数设置不正确:如果串口调试助手上的参数设置不正确,也可能导致看不到输出信息。需要确保串口调试助手上的波特率、数据位数、停止位数、奇偶校验位等参数与代码中设置的参数一致。 4. 代码中使用了错误的 printf 函数:有时候,代码中可能使用错误的 printf 函数,例如 printf_itm 函数。这些函数不是标准 C 库中的函数,无法正确地输出信息。需要确保代码中使用的是标准 C 库中的 printf 函数。 综上所述,如果在使用 CubeIDE 中的 printf 函数输出信息时看不到输出,需要逐一排查以上几个可能的原因,以确定问题所在。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值