glibc文档和字节顺序

时间:2011-05-09 20:30:20

标签: linux unix endianness glibc systems-programming

glibc documentation on process completion status表示宏WEXITSTATUS返回完成状态的低8字节。

  

宏:int WEXITSTATUS(int status)

     

如果状态为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)

除非我的endian-ness概念全部搞砸了,这怎么会是低阶 8位?或者libc是否假设数据以小端方式保存?

1 个答案:

答案 0 :(得分:4)

这不是字节序问题。字节序指的是数据如何存储在内存中;在大端或小端机器上,(((status) & 0xff00) >> 8)提取第15到8位,即status宏参数的第8到第15个最低有效位。

文档和评论令人困惑,因为状态指的是两个不同的东西。

退出的进程返回状态代码。此退出状态在源中具有类型int(作为main的返回值,或作为exit的参数),但该值应介于0和255之间。

waitwaitpid系统调用还会向调用者提供status。这种状态不同;原始退出状态的低8位现在位于第15位到第8位。我假设文档说WEXITSTATUS返回“低位8位”,因为这是从退出过程的角度打包退出状态