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告诉您可以从返回值解释哪些信息,以及如何做。我正在寻找任何文档来支持这一点,但如果没有适当的文档引用,我似乎找不到任何东西。这可能会被否决。我正在寻找任何文档来支持这一点,但如果没有适当的文档引用,我似乎找不到任何东西。这可能会被否决