fork里wait然后WEXITSTATUS取底8位不对?

请教这中间求底8位的过程!

ubuntu@XXX:~/linux_sys$ gcc get_low8bit.c
ubuntu@XXX:~/linux_sys$ ./a.out
67      0x43
----------------------------------
33      0x21
ubuntu@XXX:~/linux_sys$ cat get_low8bit.c
#include <stdlib.h>
#include <stdio.h>
#include <sys/wait.h>

int main(int argc, const char *argv[])
{
    int i=0x87654321;

    wait(&i);

    int a=WEXITSTATUS(i);
    printf("%d\t%#x\n",a,a);
    //printf("%d\t%#x\n",i,i);
    printf("----------------------------------\n");
    printf("%d\t%#x\n",i&0xff,i&0xff);
    return 0;
}
ubuntu@XXX:~/linux_sys$
阅读 3.5k
1 个回答

由于你代码里面没有创建子进程,所以wait(&i);这一行不起任何作用,是无用的代码。
你可以用gcc -E选项将宏WEXITSTATUS展开,会发现其实在Linux下就等于int a = (i & 0xff00) >> 8

没看到有文档明确说明status参数每个字节的定义,这个字段有很大可能是平台相关的,Linux下可能返回的是倒数第二个字节,其它UNIX平台返回的可能不是倒数第二个,建议不要依赖底层实现,不然跨平台移植的时候可能会有问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题