【发布时间】:2010-10-22 22:52:47
【问题描述】:
我正在为大学做一个练习,我必须在退出时返回一个值,该值实际上是一些东西的计数。这可能高于 255(exit() 无法处理),但老师建议使用计数永远不会超过该值的测试数据。
毕竟,我需要处理这个计数值,退出状态,我在主进程中使用waitpid()得到了这个值。令我惊讶的是,如果子进程返回 1,则主进程中的“真实”值是 256,2 是 512,依此类推……
我需要打印这个值,所以我简单地将它除以 256 就完成了。但是,如果我使用 WEXITSTATUS() 宏,我也会以我想要的方式获得这个值...
我查看了 C 源代码,这是我发现的:
#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
我明白这里发生了什么,例如,二进制的 512 是 10 0000 0000,向右移动 8 位将得到 00 0000 0010,即十进制的 2。我在这个宏中不明白的是 & 运算符以及 0xff00 似乎是一个随机数的事实(它可能不是,它来自哪里?)。这到底是做什么的,为什么宏中有“& 0xff00”?没有它就不行吗?
这个主题的真正问题是,在我的代码中调用这个宏和除以 256 是一样的吗?
【问题讨论】:
标签: c exit system-calls