C-管道使用printf和scanf.暂停



我是C的新手,我正试图弄清楚如何将一个程序的输出发送到另一个程序进行处理。…或管道。

例如/foo|/boo

foo-每100毫秒从外部源读取一次数据,并将其写入stdout。

boo-从stdin读取数据,进行一些简单的计算并将其写入stdout,

(我无法访问foo,但它每100毫秒在一行新行上写入一个浮点值。)

我有它的工作,然而,在每几百个条目后…有2秒的停顿。。。

所以它吐出大约200行,2秒的停顿,200行,两秒的停顿。等等。

有没有我需要注意的缓冲区?

这是boo的代码;

#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有一个100毫秒延迟的循环。当把这个输入boo时,不知怎么的,它被组合在一起了。删除此循环修复了问题

EDIT我发现了这个问题,foo有一个100ms延迟的循环。当把这个输入boo时,不知怎么的,它被组合在一起了。删除此循环修复了问题

我删除了这个循环,它解决了问题;

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);
 }

最新更新