我有一个C程序,它返回一个整数值。我很惊讶地发现,当从shell提示符检查返回值时,我得到的值为模数256。
/* prog.c */
int main(...) { return 257; }
-
> ./prog.e
> echo $?
1
答案 0 :(得分:10)
当程序退出时,它可以使用退出状态向父进程返回有关终止原因的少量信息。这是一个0到255之间的值,退出进程作为退出参数传递。
http://www.gnu.org/s/hello/manual/libc/Exit-Status.html
或者:
http://en.wikipedia.org/wiki/Exit_status
来自“posix返回代码”和“c返回代码”各自的Google搜索。
答案 1 :(得分:3)
解释正好位于man exit
:
The exit() function causes normal process termination and the value of status & 0377 is returned to the parent (see wait(2)).
换句话说,只有最低的8位传播到父进程。
在这方面,从main()
返回退出代码与将其传递给exit()
没有什么不同。
答案 2 :(得分:1)
wait
及相关的系统调用中解释了返回状态(类型)。
基本上:
<强> WEXITSTATUS(stat_val)强>
如果WIFEXITED(stat_val)的值不为零,则此宏计算为子进程传递给_exit()或exit()的状态参数的低8位,或者重写从main()返回的子进程。
所以它限于8位。你无法获得更多。 (使用Linux内核2.6.9及更高版本,waitid(2)可用于获取完整的32位。)