使用WEXITSTATUS宏在C中超过256(在exit()状态)的任何好处?

使用WEXITSTATUS宏在C中超过256(在exit()状态)的任何好处?,第1张

概述我正在为大学做一个练习,我不得不退出一个值,这个价值实际上是一个数字.这可能在255以上(exit()无法处理),但老师建议使用测试数据,其中计数永远不会超过该值. 毕竟,我需要处理这个计数值,退出状态,我通过使用waitpid()在主进程中得到这个值.令我惊讶的是,如果子进程返回1,主进程中的“真实”值为256,则为512,依此类推… 我需要打印这个值,所以我只需将它分成256,就完成了.但是, 我正在为大学做一个练习,我不得不退出一个值,这个价值实际上是一个数字.这可能在255以上(exit()无法处理),但老师建议使用测试数据,其中计数永远不会超过该值.

毕竟,我需要处理这个计数值,退出状态,我通过使用waitpID()在主进程中得到这个值.令我惊讶的是,如果子进程返回1,主进程中的“真实”值为256,则为512,依此类推…

我需要打印这个值,所以我只需将它分成256,就完成了.但是,如果我使用WEXITSTATUS()宏,我也会按照我想要的方式获取这个值

我看了C源代码,这是我发现的:

#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)

我明白这里发生了什么,例如,二进制的512是10 0000 0000,右移8点将给出00 0000 0010,这是十进制的2.在这个宏观中我不明白的是&运算符和0xff00似乎是一个随机数的事实(它可能不是,它从哪里来?).这是做什么,为什么在宏中有“& 0xff00”?不行吗?

而在这个话题中,真正的问题是将我的代码中的这个宏称为256除外?

解决方法

And the real question in this topic,
is the same thing to call this macro
in my code as divIDing by 256?

在子进程正常终止(即通过调用exit())而不是通过分段错误,断言失败等的情况下,它可能总是起作用.

waitpID()存储的状态对子进程终止的原因和退出代码进行编码.原因存储在最低有效字节(通过状态和0xff获得)中,退出码存储在下一个字节中(由状态& 0xff00屏蔽并由WEXITSTATUS()提取).当进程正常终止时,原因为0,所以WEXITSTATUS只是等于8(或除以256).但是,如果进程被信号(例如SIGSEGV)杀死,则没有退出代码,您必须使用WTERMSIG从原因字节中提取信号.

总结

以上是内存溢出为你收集整理的使用WEXITSTATUS宏在C中超过256(在exit()状态)的任何好处?全部内容,希望文章能够帮你解决使用WEXITSTATUS宏在C中超过256(在exit()状态)的任何好处?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248003.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存