我在ubuntu linux 10.04上 我有以下
#simplec.c
#include "stdio.h"
int main()
{
printf("Hello World\n");
system("ps -H");
return 12;
}
和
#callsimplec.c
#include "stdio.h"
int main()
{
int ret =0;
ret = system("./simplec");
printf("In callsimplec ret is %d\n", ret);
}
当我这样做时
gcc callsimplec.c -o callsimplec
gcc simplec.c -o simplec
./callsimplec
我明白了:
Hello World
PID TTY TIME CMD
27238 pts/2 00:00:00 bash
28066 pts/2 00:00:00 callsimplec
28067 pts/2 00:00:00 simplec
28068 pts/2 00:00:00 ps
In callsimplec ret is 3072
所以我发现3072是打印的,因为256次12是3072.无论我在simplec.c中使用什么返回值,我得到的值乘以256作为打印输出。这是为什么?我只想弄清楚它。
答案 0 :(得分:3)
system
返回的值应与宏一起使用:WEXITED,WIFEXITSTATUS等。
system
(以及wait
系列)返回的值,根据具体情况而定:
正常终止:
15 ............. 8 ............. 0
exit status 0x00
被信号杀死:
15 ............. 8 7............ 0
unused killer signal
信号停止
15 ............. 8 ............. 0
stop signal 0x7f
继续信号
15 ............................. 0
0xFFF
因此,在您的情况下,流程正常退出,系统返回12
移位8次。