关于流程完成状态的glibc文档声明宏WEXITSTATUS返回完成状态的低阶8字节。
宏: int WEXITSTATUS (int状态) 如果WIFEXITED的状态为真,则此宏将从子进程返回退出状态值的低阶8位。
然而,/usr/include/sys/wait.h说:
# define WEXITSTATUS(status) __WEXITSTATUS (__WAIT_INT (status))而且,/usr/include/bits/waitstatus.h提到:
/* If WIFEXITED(STATUS), the low-order 8 bits of the status. */
#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)除非我的终端概念都搞砸了,这低阶8位是怎么回事?或者libc假设数据是以一种小的方式保存的?
发布于 2011-05-09 21:08:17
这不是一个盲目的问题。Endianness指的是数据如何存储在内存中;无论是在大端机器上还是在小端机器上,(((status) & 0xff00) >> 8)都提取15到8位,即status宏参数的第8到第15位最不重要的位。
文档和注释令人困惑,因为status指的是两种不同的东西。
退出的进程返回状态代码。该退出状态在源中具有int类型(作为来自main的返回值,或作为exit的参数),但是该值应该介于0到255之间。
wait和waitpid系统调用还向调用方提供了一个status。这种状态是不同的;原始退出状态的低阶8位现在在第15位到第8位。我假设文档中说WEXITSTATUS返回“低阶8位”,因为从退出过程的角度来看,这是退出状态的打包。
https://stackoverflow.com/questions/5942146
复制相似问题