Ads 468x60px

##EasyReadMore##

20 6月, 2016

printf 無法 stdout 到 log 檔案

執行 ./test.out > test.log  2>&1 # 將輸出、錯誤 全部導到 std.log (螢幕沒任何輸出)
printf 無法 stdout 到檔案

程式如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
 int i = 0;
 float testf = atof("3.5");
 while(1){
  i++;
  printf("testf = %.2f i =%d\n",testf,i);
  sleep(1);
 }
 return 0;
}

原因是因為程式不會結束
所以印出的資料一直在 buffer 區
不會輸出至檔案

解決方法
可在 printf 下加入
1
fflush(stdout);
強制將 buffer 區資料輸出到檔案

但每次 printf 後面都要加上 fflush 的麻煩了
所以如下設定不要使用 buffer 就好了

1
setbuf(stdout, NULL);

當然你也可以使用 stderr 會立即印出來
1
fprintf(stderr, "I will be printed immediately");

參考:
Why does printf not flush after the call - http://goo.gl/rhiODs
Linux 標準串流(Standard Streams)的緩衝區(Buffer)問題 - G. T. Wang - http://goo.gl/DrA3tt


0 意見:

張貼留言

 
Blogger Templates