![](/img/trans.png)
[英]How to return a lambda function containing a function capture? (C++)
[英]How to capture ping's return value in C++
有谁知道,如何在c ++中捕获ping的返回值? 根据此链接 :ping应成功返回0
,失败时返回1
,例如未知主机,非法数据包大小等2
在无法访问的主机或网络上。
在C ++中,我使用system ()
调用了ping,例如int ret = system("ping 192.168.1.5");
。
我的问题是, ret
的值是0
或1
。 永远不会2
! 如果我认为正确,这是因为,我得到的这个返回值是系统函数的返回值,而不是ping的。 那么我怎么能得到ping的回报呢?
提前致谢!
kampi
编辑:现在我使用这个系统(“ping 192.169.1.5> ping_res.txt”); 但我不想使用文件(打开,并阅读它们),这就是为什么我要捕获,返回值,如果可能的话:)
如果您使用的是Windows,最好直接使用IcmpSendEcho2在应用程序中实现ping功能。
一个简单的解决方案是将ping的输出传递给文件并读取它。
例如
system("ping 192.169.1.5 > ping_res.txt");
并阅读ping_res.txt
以获取所需的信息。
从Linux上的man 3 system
:
返回值
错误时返回的值为-1(例如fork(2)失败),否则返回命令的返回状态。 后一种返回状态采用wait(2)中指定的格式。
然后从man 2 wait
Linux:
如果status不是NULL,则wait()和waitpid()将状态信息存储在它指向的int中。 可以使用以下宏检查此整数(将整数本身作为参数,而不是指向它的指针,就像在wait()和wait-pid()中一样!):
WIFEXITED(状态)
如果子节点正常终止,即通过调用exit(3)或_exit(2),或从main()返回,则返回true。WEXITSTATUS(状态)
返回子项的退出状态。 这包括子项在exit(3)或_exit(2)的调用中指定的status参数的最低有效8位,或者作为main()中return语句的参数。 仅当WIFEXITED返回true时才应使用此宏。
来自Linux上的sys / wait.h:
# define WEXITSTATUS(status) __WEXITSTATUS(__WAIT_INT(status))
来自Linux上的bits / waitstatus.h:
/* If WIFEXITED(STATUS), the low-order 8 bits of the status. */ #define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
换句话说,如果您使用的是Linux,那么您将会使用这些宏。 您使用的是HP-UX吗? 我注意到您链接到HP-UX的信息。 如果是这样,你的man 3 system
页面会说什么?
另外,请记住system
调用“sh -c command ”,您将收到sh的返回值:
退出状态
应返回以下退出值:
0要执行的脚本仅包含零个或多个空行或注释,或两者都包含。
1-125非交互式shell检测到语法,重定向或变量赋值错误。
127非交互式shell无法找到指定的command_file。
否则,shell应返回它调用或尝试调用的最后一个命令的退出状态(另请参见特殊内置实用程序中的退出实用程序)。
如果你尝试,你会发现什么回报值,例如, system("exit 203");
?
所以你只想知道返回值:即“ 0成功,1失败,如未知主机,非法数据包大小等等,2在无法访问的主机或网络上。 ”我认为在这种情况下使用ping是一种过度杀伤力。 写入文件并从中读取显然有点难看。
我想你应该尝试**打开()连接到端口7(Echo)上的主机。 然后你会得到ping返回值告诉你的信息。 如果您还想获得响应持续时间,可以通过在echo端口上向主机发送任意数据来自行测量。 编写代码需要一些时间,但我认为它的灵活性和准确性是值得的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.