gpt4 book ai didi

c - system() 未按预期使用 %ERRORLEVEL%

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:57 25 4
gpt4 key购买 nike

我试图找到一种方法来查看主机是否在 Windows 的 C 中处于事件状态,因此我使用 ping 命令运行系统,然后运行系统检查 %ERRORLEVEL% 但它始终显示 0,即使主机无法访问也是如此.

system("ping -w 1000 -n 1 192.168.0.4 | findstr /r /c:\"[0-9] *ms\"");
system("echo %ERRORLEVEL%");

此外,即使我系统调用了一些肯定会失败的东西,比如:

system("call dir");
system("echo %ERRORLEVEL%");

%ERRORLEVEL% 仍将打印 0。即使在调用命令失败后:

“'便便'不被识别为内部或外部命令,可运行的程序或批处理文件”。

此外,我注意到一些奇怪的行为,如果我尝试在与 cmd 中的 ping 相同的命令上查看 %ERRORLEVEL%:

ping -n 1 192.168.0.1 | findstr /r /c:"[0-9] *ms" & echo %ERRORLEVEL%

它总是会返回之前的 %ERRORLEVEL%。例如,如果我对可访问的 192.168.0.1 执行 ping 命令,我会根据上一条命令返回 1 或 0。但是如果我再次运行该命令,我会得到 0。现在,如果我检查无法访问的 192.168.0.4,我会得到 0。但是如果我再次检查它,我会得到 1。

谁能帮我找到一个更好的方法来查看主机是否可用或找出我在 %ERRORLEVEL% 和 system() 上做错了什么?

最佳答案

每次调用 system() 都会生成一个新的 cmd.exe 实例,这就是您丢失错误信息的原因。 system() 的返回值被定义为“实现定义的值”,但它通常是衍生进程的退出代码。

或者,您可以使用 CreateProcess()直接运行 ping,并使用 GetExitCodeProcess()获取其退出代码。

或者,根本不运行 ping。您可以使用 IcmpSendEcho() (或相关功能)代替。

关于c - system() 未按预期使用 %ERRORLEVEL%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45644352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com