使用 system() 执行命令返回返回值的 256 倍 (<< 8)。这有什么意义呢?

Ben*_*ner 2 c++ return-value bit-shift

我花了一段时间才找到与此相关的问题的解决方案:

status = system("[ -e myFile ] && exit 1 || exit 101");

if(status == 101)
{
    ...
Run Code Online (Sandbox Code Playgroud)

返回值被发送回 25856(101*256(或 101 << 8))。

我找到的所有答案都没有表明发生这种有效的 256 乘法的原因......

有谁能为我提供解释吗?

谢谢!

Joh*_*ger 5

就语言标准而言, 的返回值system()是实现定义的。没有理由假设 的返回值与system()所运行命令的退出状态有任何关系。

然而,对于符合 POSIX 的库,成功调用的返回值system()被定义为wait(2) 函数使用的格式。我推测这是为了一致性,也许也是为了易于实施。无论如何,该返回值不仅包含有关退出状态的信息,还包含有关进程如何终止(正常终止或由于信号终止)的信息以及其他信息。在这样的系统上,人们希望通过将WIFEXITED()宏应用于代码来检查进程是否正常退出,并通过WEXITSTATUS()宏提取退出状态本身。这些宏将在sys/wait.h.

当然,这都是非常 C 风格的。可能有一个更类似于 C++ 的替代方案。