將打印(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,那么所有輸出立即處理!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM