我必须从 C++ 代码中调用 ping。我想轻松读取输出以供进一步使用。
我想出了两个解决方案:
- 使用叉子和管道,将 ping 输出重定向到管道,然后解析它
- 找到一个适合直接使用 ping(ip_addresss) 函数的库
我想要后者,但我没有找到任何明显是标准解决方案的东西。
你会怎么做?
原文由 nios 发布,翻译遵循 CC BY-SA 4.0 许可协议
我必须从 C++ 代码中调用 ping。我想轻松读取输出以供进一步使用。
我想出了两个解决方案:
我想要后者,但我没有找到任何明显是标准解决方案的东西。
你会怎么做?
原文由 nios 发布,翻译遵循 CC BY-SA 4.0 许可协议
https://github.com/octo/liboping 怎么样?
#include <oping.h>
int main(){
// run ping 100times
for (uint32_t i=0; i< 100; i++){
pingobj_t * pingObj = ping_construct();
ping_host_add(pingObj, "www.gmx.de");
auto startTime = std::chrono::high_resolution_clock::now();
auto ret = ping_send(pingObj);
auto endTime = std::chrono::high_resolution_clock::now();
if (ret > 0){
auto duration = (double)std::chrono::duration_cast<std::chrono::microseconds>(endTime - startTime).count()/1000.0;
std::cout << "success -- ping in " << duration << "ms" << std::endl;
} else {
std::cout << "failed" << std::endl;
}
ping_destroy(pingObj);
// wait 1sec
std::this_thread::sleep_for(std::chrono::milliseconds (1000));
}
}
liboping
应该存在于大多数 linux 系统中
sudo apt install liboping-dev
)原文由 tswaehn 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
3 回答2k 阅读✓ 已解决
4 回答4k 阅读
2 回答3.9k 阅读✓ 已解决
2 回答5.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
我会选择你的第一个选择。 Linux 是围绕着这样一个概念构建的,即拥有小型、专门的应用程序,这些应用程序可以很好地完成一件事,即与管道通信。您的应用程序不应包含用于实现 ping 的库,因为已经有一个内置命令可以执行此操作,而且效果非常好!