【问题标题】:c++ stream input processc++流输入过程
【发布时间】:2012-11-26 14:21:04
【问题描述】:

我想将一个程序的文本输出转换为 Gui 输出,第一个程序每微秒产生一行输出。如果我在 linux 中使用管道命令发送,第二个程序如何逐行接收并处理它?换句话说,我在 C++ 中有 main 函数,这个参数是流且无限制的。 谢谢

【问题讨论】:

  • 如果将输入通过管道传输到进程中,它会转到标准输入,在 C++ 中为std::cin。您可以从那里获取管道输入。

标签: c++ stream pipe


【解决方案1】:

程序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 程序。请注意,为了使程序不阻塞,您可能希望在单独的线程上从标准输入读取数据。

至于“每微秒接收输入”的限制,这可能不现实......它会尽可能快地处理,但你不能依赖标准输入/输出来那么快,特别是如果你'正在发送大量数据。

【讨论】:

    猜你喜欢
    • 2017-08-29
    • 2019-06-14
    • 2013-10-17
    • 1970-01-01
    • 2012-09-06
    • 2010-09-29
    • 2010-10-02
    • 2014-03-06
    • 2010-11-04
    相关资源
    最近更新 更多