2013-02-04 59 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); 
}