gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:54:52 24 4
gpt4 key购买 nike

我是 C 语言新手,我正在尝试弄清楚如何将一个程序的输出发送到另一个程序进行处理......或通过 PIPE 进行处理。

例如。 ./foo | ./嘘

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

boo - 从标准输入读取数据,进行一些简单的计算并将其写入标准输出,

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

我可以正常工作,但是每输入几百个条目后...就会有 2 秒的暂停...

所以它输出大约 200 行,2 秒暂停,200 行,2 秒暂停。等等..

是否有我需要注意的缓冲区?

这是 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 时,它以某种方式组合在一起。删除此循环解决了问题

最佳答案

编辑我发现了这个问题,foo 有一个 100 毫秒延迟的循环。当将其传递到 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);
}

关于C - 使用 printf 和 scanf 的管道..暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14695854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com