1

1つのプログラムからのテキスト出力をGui出力に変換し、最初のプログラムがマイクロ秒ごとに行出力を生成したい。Linuxでpipeコマンドを使用して送信する場合、2番目のプログラムはどのように行ごとに受信して処理しますか?言い換えれば、このパラメーターがストリームで無制限であるというC++の主な機能があります。ありがとうございました

4

1 に答える 1

3

プログラム1:

#include <iostream>
int main()
{
    std::cout << "Program1 says Hello world!" << std::endl; // output to standard out using std::cout
}

プログラム2:

#include <iostream>
#include <string>
int main()
{
    std::string line;
    while (std::getline(std::cin, line)) // Read from standard in line by line using std::cin and std::getline
    {
         std::cout << "Line received! Contents: " << line << std::endl;
    }
}

ここで、を実行Program1してパイプを使用するとProgram2、次のようになります。

$ ./Program1 | ./Program2
Line Recieved! Contents: Program1 says Hello world!

に達するまで(または何らかのエラーが発生するProgram2まで)、標準入力から読み取りを続けることに注意してください。EOF

あなたの場合、Program1は出力を生成するものであり、出力Program2を消費するGUIプログラムです。プログラムを非ブロッキングにするために、別のスレッドで標準入力から読み取りを行うことをお勧めします。

「マイクロ秒ごとに入力を受信する」という制約については、現実的ではないかもしれません...可能な限り高速に処理されますが、特に送信する場合は、標準の入出力をそれほど高速にすることはできません。まともな量のデータ。

于 2012-12-08T16:46:37.117 に答える