Ric*_*ral 12 c system-calls exit
我正在为大学做练习,我必须在退出时返回一个值,这个值实际上是一些东西.这可能高于255(exit()无法处理)但是老师建议使用测试数据,其中计数永远不会高于该值.
毕竟,我需要处理这个计数值,退出状态,我通过使用waitpid()在主进程中得到了这个值.令我惊讶的是,如果子进程返回1,则主进程中的"实际"值为256,2为512,依此类推......
我需要打印这个值,所以我简单地将它除以256并完成了.但是,如果我使用WEXITSTATUS()宏,我也会按照我想要的方式得到这个值...
我查看了C源代码,这是我发现的:
#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
Run Code Online (Sandbox Code Playgroud)
我理解这里发生了什么,例如,二进制512是10 0000 0000,右移8'将得到00 0000 0010,即十进制2.在这个宏中我不明白的是&运算符和0xff00似乎是一个随机数的事实(它可能不是,它来自哪里?).这究竟是做什么的,为什么宏中有"&0xff00"?它不会有效吗?
在这个主题中真正的问题是,在我的代码中将此宏称为除以256是一回事吗?
Nat*_*hen 18
在这个主题中真正的问题是,在我的代码中将此宏称为除以256是一回事吗?
它可能总是在子进程正常终止的情况下工作(即通过调用exit(),而不是通过分段错误,断言失败等).
存储的状态通过waitpid()编码子进程终止的原因和退出代码进行编码.原因存储在最低有效字节(由此获得status & 0xff)中,退出代码存储在下一个字节中(由掩码掩盖并由status & 0xff00其提取WEXITSTATUS()).当进程正常终止时,原因是0,因此WEXITSTATUS等于移位8(或除以256).但是,如果进程被信号(例如SIGSEGV)杀死,则没有退出代码,您必须使用WTERMSIG从原因字节中提取信号编号.
| 归档时间: |
|
| 查看次数: |
14176 次 |
| 最近记录: |