在 Linux (Ubuntu 16.04) C++ 上从 Non-terminating 程序连续获取数据

Continuously Get Data from a Non-terminating Program on Linux (Ubuntu 16.04) C++

我的情况是依赖第三方统计调查应用程序;该程序是黑盒的,所以我只能依赖该程序提供的任何输出。

想法是这样的:

问题是:提供的统计程序不会终止,所以 popen() 对我不起作用。理想情况下,我希望 get_stats 线程根据统计输出不断更新内部变量。但是,偶尔出现一些延迟(约 1 秒左右)是完全可以接受的。

有没有办法做这样的事情?我假设它是特定于平台的,所以正如标题中提到的,如果你有 solution/idea for Ubuntu 16.04.[= 就好了32=]


编辑:这里有一个更好的 solution 来解决我在 gazebo 方面的具体问题:

gz stats 使用的算法如下:

注意:我用 avg(...) 来解释算法,但更好的选择是 sum()avg 不是必需的,因为 sim_timereal_time 的大小相同。

使用netcatsocat、运行后台黑盒应用,连接监听TCP或UDP端口。您需要编写的只是 C/C++ 中的套接字程序,用于处理来自套接字的数据。您可以通过套接字编程处理错误、错误输出、断开连接等。

这可以是 good start:

nc -l -p 1234 -e /path/to/app

因为您说应用程序是 Gazebo,所以您可以使用 libgazebo7-dev 库并从 C/C++ 控制 gazebo,如 here 所述。