【问题标题】:If then statement c programmingif then语句c编程
【发布时间】:2023-03-07 12:42:01
【问题描述】:

我想知道是否有人可以帮我写一个用于 ping 的 if then 语句。

示例 IP:192.168.10.1

这是我到目前为止所拥有的......

lcd_command(LINE_1);
if system(("ping -c1 192.168.10.1")) {
lcd_writechars("Ping Successful");
}
else {
lcd_writechars("Ping Successful");
}

基本上,我希望脚本每 10 秒 ping 一次,并在可以访问主机时在我的 LCD 上显示“Ping 成功”。当主机无法访问时,我希望在我的 LCD 上显示“Ping Unsuccessful”,直到再次可以访问主机。

如果有人可以帮助我,我将不胜感激!

【问题讨论】:

  • 您的代码几乎是正确的。我想你想在else子句中写"Ping Unsuccessful"。如果这不是您的问题,请告诉我们您遇到的问题并具体说明。
  • 您的语法错误。 if () 需要括号和对 system 的调用在 () 内。请提供一个完整的示例,而不是一些随机剪切的代码 sn-p。

标签: c ping lcd


【解决方案1】:

您的大括号在语法上不正确(括号需要在if 之后开始,而不是在system 之后)。另外请在下面找到使用 W* 宏调用 system 返回状态的正确用法。

int status = system("ping -c1 192.168.10.1");
if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
lcd_writechars("Ping Successful\n");
}
else {
lcd_writechars("Ping failed\n");
}

【讨论】:

  • 这很好用,非常感谢!我有一个简单的问题,是否有办法让这个过程在后台运行?当我运行代码时,它会在终端中显示 ping 周期。我将如何修改代码以使其不在终端中显示 ping,或者这是不可能的?
  • 我不确定您所说的在后台运行是什么意思。由于您正在寻找退出状态,因此 system 调用仅在 ping 完成后才需要返回。如果您的意思只是不显示ping 的输出,那么您可以使用shell 提供的所有功能,例如重定向。所以不显示输出,你可以使用system("ping -c1 192.168.10.1 > /dev/null")。为了不显示任何错误,system("ping -c1 192.168.10.1 > /dev/null 2>&1").
  • 添加 /dev/null 正是我想要的,非常感谢您的帮助!
【解决方案2】:

您必须捕获 ping 输出并以某种方式对其进行处理,但您使用的是 system()。

我建议你学习如何使用 popen() 来执行进程并将输出通过管道传输到内存中的某个位置,这样你就可以解析输出并找出 ping 的结果。

现在您依靠 system() 返回一个值 - system() 不知道也不关心您的 ping 是否成功。如果进程执行失败,系统将返回-1,如果有帮助,系统将在成功完成时返回进程的退出状态。

ETA - 另外,从阅读代码看来,无论 system() 返回什么,您都会输出相同的消息。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2014-03-30
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多