Linux / bash中程序返回值的有效范围是多少?
我有一个C程序,它返回一个整数值。 我很惊讶地发现,当从shell提示符检查返回值时,我得到的值为模数256。
/* prog.c */ int main(...) { return 257; }
–
> ./prog.e > echo $? 1
- 为什么我看不到整数?
- 这种行为记录在哪里?
- 如何将整个32位值获取到shell?
当程序退出时,它可以使用退出状态向父进程返回有关终止原因的少量信息。 这是一个0到255之间的值,退出进程作为退出参数传递。
http://www.gnu.org/s/hello/manual/libc/Exit-Status.html
或者:
http://en.wikipedia.org/wiki/Exit_status
来自“posix返回代码”和“c返回代码”各自的Google搜索。
解释就在man exit
的顶部:
exit()函数导致正常的进程终止和值 status&0377返回给父级(参见wait(2))。
换句话说,只有最低8位传播到父进程。
在这方面,从main()
返回退出代码与将其传递给exit()
没有什么不同。
在wait
和相关的系统调用中解释返回状态(类型)。
基本上:
WEXITSTATUS(stat_val)
如果WIFEXITED(stat_val)的值不为零,则此宏计算为子进程传递给_exit()或exit()的status参数的低8位 ,或子进程从main返回的值()。
所以它限制在8位。 你无法获得更多。 (使用Linux内核2.6.9及更高版本,waitid(2)可用于获取完整的32位。)