2010-03-21 133 views
0

我有一個簡單的網關監聽器,它通過printf在屏幕輸出處生成一個日誌。我想記錄它,以便我可以將它插入到一個MySQL表中。C有沒有像PHP ob_start的東西?

printf("\nPacket received!! Decoding..."); 

我不知道是否有任何快速的方法做,這是C.

但如果是,我可以在同一時間獲得兩個輸出?

感謝

回答

2

我不知道,做輸出緩衝中C.任何功能,但你可以很容易地模擬一個樣:

char buffer[MAX_BUFFER_SIZE] = ""; // that buffers your output. 
char temp[SOME_SUITABLE_MAX]; 
現在

每次你使用printf,使用sprintf作爲如下:

sprintf(temp,"\nPacket received!! Decoding..."); 

和他們這個字符串添加到緩衝區

strcat(buffer,temp); 

繼續執行sprintf然後strcat對於每個要緩衝的消息,一旦完成,緩衝區將具有緩衝輸出。

+0

這正是我正在尋找的提供我將日誌保存在MySQL數據庫。謝謝:) – 2010-03-21 13:54:32

1

假設通過「記錄」你的意思是你想寫它到一個文件,那麼是的,這很容易。 Unix有過tee工具多年,將讓你做這樣的事情:

gateway_listener | tee record_file 

如果你的系統不提供tee默認情況下,它應該是很容易找到或編譯運行一個:

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char **argv) { 

    FILE *outfile; 
    int c; 

    if (argc < 2) { 
     fprintf(stderr, "Usage: tee <out_file>\n"); 
     return EXIT_FAILURE; 
    } 

    if (NULL == (outfile = fopen(argv[1], "w"))) { 
     fprintf(stderr, "Unable to open '%s'\n", argv[1]); 
     return EXIT_FAILURE; 
    } 

    while (EOF != (c=getchar())) { 
     putc(c, outfile); 
     putchar(c); 
    } 

    fclose(outfile); 
    return 0; 
} 
+0

把輸出重定向到一個文件似乎很簡單,但我真正需要的是將輸出保存到一個mysql表。感謝您的意見和我要照顧的自定義T恤:D – 2010-03-21 13:56:19