在linux下用c ping的最佳方法是什么?

新手上路,请多包涵

我必须从 C++ 代码中调用 ping。我想轻松读取输出以供进一步使用。

我想出了两个解决方案:

  • 使用叉子和管道,将 ping 输出重定向到管道,然后解析它
  • 找到一个适合直接使用 ping(ip_addresss) 函数的库

我想要后者,但我没有找到任何明显是标准解决方案的东西。

你会怎么做?

原文由 nios 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 814
2 个回答

我会选择你的第一个选择。 Linux 是围绕着这样一个概念构建的,即拥有小型、专门的应用程序,这些应用程序可以很好地完成一件事,即与管道通信。您的应用程序不应包含用于实现 ping 的库,因为已经有一个内置命令可以执行此操作,而且效果非常好!

原文由 e.James 发布,翻译遵循 CC BY-SA 2.5 许可协议

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 系统中

  • 安装 liboping-dev(例如: sudo apt install liboping-dev
  • 链接反对 liboping

原文由 tswaehn 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题