2013-02-04 76 views
0

我是C新手,我試圖弄清楚如何將一個程序的輸出發送到另一個程序進行處理......或PIPE它。C - 管道使用printf和scanf ..暫停

例如, ./foo | ./boo

foo - 每隔100ms從外部源讀取數據並將其寫入標準輸出。

噓 - 從標準輸入讀取數據,做一些簡單的計算,並將其寫入到stdout,

(我沒有獲得富,但它寫在一個新的生產線每100ms的浮點值。)

我有工作,每天幾百項後,但...有2秒鐘暫停...

所以它吐出約200線,2秒的停頓,200線,2秒暫停。

是否有我需要注意的緩衝區?

這裏是噓聲的代碼;

#include <stdio.h> 
float input; 
float value; 

while (1) 
    { 
    input = scanf("%f", &value); 

    {do stuff here} 

    printf("result %f \n ", input); 
    fflush(stdout); 

    } 
    return 0; 
} 

編輯 我發現這個問題,FOO曾經爲延時100ms循環。當把它揉成噓聲時,它不知何故被分組在一起。刪除這個循環修復了問題

+1

我注意到'printf'沒有換行符。如果是這樣的話,你應該在'printf'後面調用'fflush(stdout)'。 –

+0

感謝David,我用newline char&fflush更新了代碼,我仍然得到相同的結果。 – Mwilliams03

+0

如果你打印一個'\ n',你不必刷新標準輸出: –

回答

0

編輯我發現這個問題,foo有100ms延遲的循環。當把它揉成噓聲時,它不知何故被分組在一起。刪除這個循環固定的問題

我刪除了這個循環,它解決了問題;

int millis() 
{ 
    struct timeval tv; 
    gettimeofday(&tv, NULL); 
    return (tv.tv_sec) * 1000 + (tv.tv_usec)/1000; 
} 
start = millis() 
while(millis() - start < 20) 
{ 
    usleep(1000); 
}