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文件中。




所以,请路过的,看到的朋友们,需要的话到俺的小店里充话费吧,移动联通电信的都可以充值,目前全是亏本充值,只赚信誉不赚钱

俺在这里谢谢各位了

我的淘宝店铺:

  天使话费充值二手书籍吧

http://shop36800091.taobao.com/


你可能感兴趣的:(linux下printf函数输出不及时解决办法)