【问题标题】:Can't execute ping from program无法从程序执行 ping
【发布时间】:2014-05-08 16:46:19
【问题描述】:

我正在尝试在我的程序中执行ping 命令。我正在研究 RaspBerry Pi B 模型上的最新 Raspian。它告诉我: /bin/sh-c: 0: Can't open ping -c 1 192.168.0.12 我的代码(它还没有完成,我知道下面的代码可能有一些问题):

int status;
pid_t pid;
pid = fork();
const char* commandChar = commandName.c_str();
if(pid == 0)
{
    execl(SHELL, SHELL "-c", commandChar, NULL);
    _exit(1);
}else if(pid < 0)
{
    return false;
}
commandChar = NULL;
    delete commandChar;
return true;

Ping (/bin/ping) 拥有rwsr-xr-x 权限,为什么我不能执行它以及如何使它工作?

【问题讨论】:

  • 你试过用 popen() 代替吗?
  • 我尝试使用 popen(),但我得到了 ping 命令的全部输出。我只想要退出码,这样我就知道ping成功了。
  • 只需解析退出代码的输出即可。 :)
  • 但是有很多输出要处理。

标签: c++ linux process fork ping


【解决方案1】:

execl 需要一个文件路径,你给它的是文件路径“/bin/ping -c 192.168.0.12”,当然不存在。查看man page for execl,您会看到最后一个参数用于要运行的程序的参数。

【讨论】:

  • @Over Killer,你会想wait 在某个地方的那个孩子,特别是如果你打算多次执行 ping。
  • 可能,但他没有问这个:P
  • 我知道。不需要答案,我只是时不时地对事情有一点强迫症。
  • @Duck 感谢您的建议。但是wait 应该多长时间?我怎么知道程序应该等待多长时间?
  • @Over Killer,基本选择:(1)wait会阻塞父进程直到子进程死亡; (2) 您可以使用waitpid 和 NOHANG 选项定期轮询死去的孩子; (3) 为 SIGCHLD 设置信号处理程序,并(异步)在处理程序中使用 waitpid 在子进程死亡时获取子进程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2018-10-05
相关资源
最近更新 更多