【问题标题】:system() call is returning wrong value in Csystem() 调用在 C 中返回错误值
【发布时间】:2013-12-24 12:36:56
【问题描述】:

即使在通过 system() 调用成功运行命令后,我也得到了 -1 返回值。 有关详细信息,请参阅以下 C 代码。

system("ping -w 3 -c 1 -q -I 63.254.203.24 63.254.203.26 >/dev/null");

然后我正在检查这个 system() 调用的返回值,即使它是可 ping 的,但我发现 -1 作为返回值。

【问题讨论】:

  • 您确定 ping 运行成功了吗?检查是否将输出重定向到某个文件确实会创建具有预期内容的文件。
  • ping 运行成功。

标签: c linux system


【解决方案1】:

查看实际返回值使用WEXITSTATUS(n)system 不返回实际值的原因是因为(这仅对 linux 有效)它是使用 forkexecwait 后者返回进程的状态,其中包含进程正常结束还是由于信号加上实际返回值,并且要访问这些不同的值,您必须使用宏,例如 WEXITSTATUS(n) 这些宏是在man 3 wait中提到

man system 的部分返回值:

返回的值为 -1 错误(例如,fork(2) 失败),并且 否则返回命令的状态。后一种返回状态是 以 wait(2) 中指定的格式。因此,退出代码 命令将是WEXITSTATUS(status)。如果 /bin/sh 不能 执行时,退出状态将是执行的命令的状态 exit(127).

【讨论】:

  • 你也可以引用man 3 system手册页“返回值”部分的一些话。
【解决方案2】:

幸运的是,我得到了答案。由于内存故障,它是 fork 失败的。 使用 system() 调用不是一个好主意。

感谢您的支持和回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2014-07-03
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2019-07-20
    相关资源
    最近更新 更多