我花了一段时间才找到与此相关的问题的解决方案:
status = system("[ -e myFile ] && exit 1 || exit 101");
if(status == 101)
{
...
返回值被发送回25856(101 * 256(或101 <&lt; 8))。
我发现的答案都没有表明这个有效的256次乘法发生的原因......
任何人都可以为我提供解释吗?
谢谢!
答案 0 :(得分:3)
就语言标准而言,system()
的返回值是实现定义的。没有理由假设system()
的返回值与运行的命令的退出状态有任何关系。
但是,对于符合POSIX的库,成功调用system()
的返回值定义为wait
(2)函数使用的格式。我推测这是为了保持一致性,也许是为了便于实现。在任何情况下,该返回值不仅包含有关退出状态的信息,还包含有关进程如何终止的信息 - 通常或由于信号 - 以及其他信息。在这样的系统上,期望通过将WIFEXITED()
宏应用于代码来检查进程是否正常退出,并通过WEXITSTATUS()
宏提取退出状态。这些宏将在sys/wait.h
中声明。
当然,这一切都非常C-ish。可能有更多的C ++ - 替代其中一些。
答案 1 :(得分:0)
对于任何系统调用的返回值,高8位是退出状态,低8是信号ID。要检索退出状态,就像您发现的那样,必须将值向右移8位。
答案 2 :(得分:0)