C++ 使用system()执行命令将返回256倍的返回值(

C++ 使用system()执行命令将返回256倍的返回值(,c++,return-value,bit-shift,C++,Return Value,Bit Shift,我花了一段时间才找到与此相关的问题的解决方案: status = system("[ -e myFile ] && exit 1 || exit 101"); if(status == 101) { ... 对于任何系统调用的返回值,返回值以25856 101*256或101的形式发送回,高8位是退出状态,低8位是信号ID。要检索退出状态,如您所发现的,必须将值右移8位。对于任何系统调用的返回值,高8位是退出状态,低8位是信号ID。要检索退出状态,如您所发现的,必须将

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

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

if(status == 101)
{
    ...

对于任何系统调用的返回值,返回值以25856 101*256或101的形式发送回,高8位是退出状态,低8位是信号ID。要检索退出状态,如您所发现的,必须将值右移8位。

对于任何系统调用的返回值,高8位是退出状态,低8位是信号ID。要检索退出状态,如您所发现的,必须将值向右移动8位。

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

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


当然,这都是很C-ish的。有可能有一种更像C++-ish的替代方案来代替其中的一些。

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

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

当然,这都是很C-ish的。可能有一个更像C++的替代方案来代替其中的一些。

实现的返回值是定义的。特别是,它没有定义为返回已执行命令传递给exit的值

为什么您的系统不仅返回命令的返回值,而且还返回一个恰好为0的低阶字节。。。这也取决于您使用的实现

如果您碰巧使用POSIX,您可以阅读以下内容以了解系统返回的内容:

如果命令不是空指针,系统应以waitpid指定的格式返回命令语言解释器的终止状态

for waitpid告诉您可以从返回值解释哪些信息,以及如何定义实现的返回值。特别是,它没有定义为返回已执行命令传递给exit的值

为什么您的系统不仅返回命令的返回值,而且还返回一个恰好为0的低阶字节。。。这也取决于您使用的实现

如果您碰巧使用POSIX,您可以阅读以下内容以了解系统返回的内容:

如果命令不是空指针,系统应以waitpid指定的格式返回命令语言解释器的终止状态


for waitpid告诉您可以从返回值解释哪些信息,以及如何做。

我正在寻找任何文档来支持这一点,但如果没有适当的文档引用,我似乎找不到任何东西。这可能会被否决。我正在寻找任何文档来支持这一点,但如果没有适当的文档引用,我似乎找不到任何东西。这可能会被否决