将打印(printk/printf)及时写入文件的方法

问题是这样的,在测试一个gps的app的时候,我使用脚本  “ gps_test_app  > /tmp/gps_log.txt &"

但是但是,去查看gps_log.txt的时候并没有看到正常的打印结果。原因是系统为了效率,不会每时每刻都去写文件,他是有一个触发条件才会去写文件。

那么如果我希望及时写入文件,我好查看log,要怎么办呢?解决方法如下:

加入以下2行代码:

setbuf(stdout,NULL);

setbuf(stderr,NULL);

这样就可以及时的将数据写入文件了。

----------------------------------------我是分割线---------------------------------

----------------------------------setbuf(stdout,NULL)原理如下--------

程序输出有两种方式:一种是即时处理方式,另一种是先暂存起来,然后再大块写入的方式,前者往往造成较高的系统负担。因此,c语言实现通常都允许程序员进行实际的写操作之前控制产生的输出数据量。

这种控制能力一般是通过库函数setbuf实现的。如果buf是一个大小适当的字符数组,那么:

setbuf(stdout,buf);

语句将通知输入/输出库,所有写入到stdout的输出都应该使用buf作为输出缓冲区,直到buf缓冲区被填满或者程序员直接调用fflush(译注:对于由写操作打开的文件,调用fflush将导致输出缓冲区的内容被实际地写入该文件),buf缓冲区中的内容才实际写入到stdout中。缓冲区的大小由系统头文件<stdio.h>中的BUFSIZ定义。

如果buf=NULL,那么所有输出立即处理!!!

原文地址:https://www.cnblogs.com/ricks/p/10105982.html