关于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 *streamconst 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文件中。

猜你喜欢

转载自blog.csdn.net/boiled_water123/article/details/82119709
今日推荐