我正在为大学做一个练习,我必须在退出时返回一个值,该值实际上是一个计数。这可能高于 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 是一样的吗?