首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glibc文档和endianness

glibc文档和endianness
EN

Stack Overflow用户
提问于 2011-05-09 20:30:19
回答 1查看 543关注 0票数 3

关于流程完成状态的glibc文档声明宏WEXITSTATUS返回完成状态的低阶8字节。

宏: int WEXITSTATUS (int状态) 如果WIFEXITED的状态为真,则此宏将从子进程返回退出状态值的低阶8位。

然而,/usr/include/sys/wait.h说:

代码语言:javascript
复制
# define WEXITSTATUS(status)    __WEXITSTATUS (__WAIT_INT (status))

而且,/usr/include/bits/waitstatus.h提到:

代码语言:javascript
复制
/* If WIFEXITED(STATUS), the low-order 8 bits of the status.  */
#define __WEXITSTATUS(status)   (((status) & 0xff00) >> 8)

除非我的终端概念都搞砸了,这低阶8位是怎么回事?或者libc假设数据是以一种小的方式保存的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-09 21:08:17

这不是一个盲目的问题。Endianness指的是数据如何存储在内存中;无论是在大端机器上还是在小端机器上,(((status) & 0xff00) >> 8)都提取15到8位,即status宏参数的第8到第15位最不重要的位。

文档和注释令人困惑,因为status指的是两种不同的东西。

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5942146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档