使用 system() returns 执行命令 return 值的 256 倍 (<< 8)。这有什么意义呢?
Executing command with system() returns 256 times the return value ( << 8). What is the point of this?
我花了一段时间才找到与此相关的问题的解决方案:
status = system("[ -e myFile ] && exit 1 || exit 101");
if(status == 101)
{
...
return 值被发回为 25856(101*256(或 101 << 8))。
None 我找到的答案指出了发生这种有效 256 乘法的原因...
谁能给我解释一下?
谢谢!
任何系统调用的return值,高8位为退出状态,低8位为信号ID。要检索退出状态,就像您发现的那样,您必须将值右移 8 位。
就语言标准而言,system()
的 return 值是实现定义的。没有理由假设 system()
的 return 值与命令的退出状态 运行.
有任何关系
然而,对于符合 POSIX 的库,成功调用 system()
的 return 值被定义为 wait
使用的格式(2)功能。我推测这是为了保持一致性,也可能是为了便于实施。在任何情况下,该 return 值不仅包含有关退出状态的信息,还包含有关进程如何终止(正常情况下或由于信号)和其他信息的信息。在这样的系统上,人们应该通过将 WIFEXITED()
宏应用于代码来检查进程是否正常退出,并通过 WEXITSTATUS()
宏提取退出状态本身。这些宏将在 sys/wait.h
.
中声明
当然,这一切都非常 C-ish。其中一些可能有更多 C++ 风格的替代方案。
system
的 return 值是实现定义的。特别是,它没有定义为 return 已执行命令传递给 exit
的值。
为什么 你的系统不只是 return 命令的 return 值,还有一个低位字节恰好为 0...好吧,这也取决于您使用的是哪种实现方式。
如果您恰好在使用 POSIX,您可以阅读此 manual 以了解 system
returns:
If command is not a null pointer, system() shall return the termination status of the command language interpreter in the format specified by waitpid()
waitpid
的 manual 告诉您可以从 return 值中解释哪些信息,以及如何解释。
我花了一段时间才找到与此相关的问题的解决方案:
status = system("[ -e myFile ] && exit 1 || exit 101");
if(status == 101)
{
...
return 值被发回为 25856(101*256(或 101 << 8))。
None 我找到的答案指出了发生这种有效 256 乘法的原因...
谁能给我解释一下?
谢谢!
任何系统调用的return值,高8位为退出状态,低8位为信号ID。要检索退出状态,就像您发现的那样,您必须将值右移 8 位。
就语言标准而言,system()
的 return 值是实现定义的。没有理由假设 system()
的 return 值与命令的退出状态 运行.
然而,对于符合 POSIX 的库,成功调用 system()
的 return 值被定义为 wait
使用的格式(2)功能。我推测这是为了保持一致性,也可能是为了便于实施。在任何情况下,该 return 值不仅包含有关退出状态的信息,还包含有关进程如何终止(正常情况下或由于信号)和其他信息的信息。在这样的系统上,人们应该通过将 WIFEXITED()
宏应用于代码来检查进程是否正常退出,并通过 WEXITSTATUS()
宏提取退出状态本身。这些宏将在 sys/wait.h
.
当然,这一切都非常 C-ish。其中一些可能有更多 C++ 风格的替代方案。
system
的 return 值是实现定义的。特别是,它没有定义为 return 已执行命令传递给 exit
的值。
为什么 你的系统不只是 return 命令的 return 值,还有一个低位字节恰好为 0...好吧,这也取决于您使用的是哪种实现方式。
如果您恰好在使用 POSIX,您可以阅读此 manual 以了解 system
returns:
If command is not a null pointer, system() shall return the termination status of the command language interpreter in the format specified by waitpid()
waitpid
的 manual 告诉您可以从 return 值中解释哪些信息,以及如何解释。