Linux / bash中程序返回值的有效范围是多少?

时间:2011-11-10 16:34:56

标签: c bash return-value ubuntu-10.04

我有一个C程序,它返回一个整数值。我很惊讶地发现,当从shell提示符检查返回值时,我得到的值为模数256。

/* prog.c */
int main(...) { return 257; }

-

> ./prog.e
> echo $?  
1
  • 为什么我看不到整数?
  • 这种行为记录在哪里?
  • 如何将整个32位值输入shell?

3 个答案:

答案 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位。)