0

私はCを初めて使い、あるプログラムの出力を別のプログラムに送信して処理する方法を理解しようとしています...またはPIPEします。

例えば。./フー | ./ブー

foo - 外部ソースから 100 ミリ秒ごとにデータを読み取り、標準出力に書き込みます。

boo - stdin からデータを読み取り、いくつかの簡単な計算を行い、それを stdout に書き込みます。

(私は foo にアクセスできませんが、新しい行に 100 ミリ秒ごとに float 値を書き込みます。)

私はそれを機能させていますが、数百のエントリごとに... 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ミリ秒の遅延のループがありました。これをブーにパイプすると、どういうわけかグループ化されていました。このループを削除すると、問題が修正されました

4

1 に答える 1

0

編集問題が見つかりました.fooには100ミリ秒の遅延のループがありました。これをブーにパイプすると、どういうわけかグループ化されていました。このループを削除すると、問題が修正されました

このループを削除すると、問題が修正されました。

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);
 }
于 2013-02-05T01:32:48.790 に答える