我正在为大学做一项练习,其中我必须使用exit返回一个值,这个值实际上是某个东西的计数。这个值可能超过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相同?