system()调用在C中返回错误的值

时间:2013-12-24 12:36:57

标签: c linux system

即使通过system()调用成功运行命令后,我的返回值也为-1。 有关更多信息,请参阅以下C代码。

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

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

2 个答案:

答案 0 :(得分:7)

查看实际返回值使用WEXITSTATUS(n)以及system未返回实际值的原因是因为(这仅对linux有效)它是使用{{1}实现的},forkexec后者返回进程的状态,该进程包含进程是正常结束还是由于信号加上实际返回值,并且访问那些您将不得不使用的值在wait

中使用WEXITSTATUS(n)之类的宏来提及这些宏

man 3 wait的返回值部分:

  

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

答案 1 :(得分:1)

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

感谢您的支持和回答。