首页 > 其他 > 详细

发现fork容易出错的一个地方

时间:2014-10-10 14:15:11      阅读:253      评论:0      收藏:0      [点我收藏+]

今天在看代码时发现一段有意思的代码

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>

int main()
{
        int pid=1;

        if(pid=fork()<0)
        {
                perror("fork() error!\n");
                exit(-1);
        }
        else if(pid==0)
        {
                printf("child  pid[%d]\n",getpid());
                sleep(15);
        }
        else
        {
                printf("parents pid[%d]\n",getpid());
                sleep(15);
        }

        return 0;
}

先猜一下这段代码的执行结果是什么?

看起来很简单,肯定很多人说结果如下:

child  pid[%d]
parents pid[%d]

 

实际上执行一下,结果如下:

child  pid[%d]

child  pid[%d]

 

如果代码改动成       if((pid=fork())<0)

结果就和原先预期的一样:

child  pid[%d]
parents pid[%d]

 

为什么是这样,原因是于运算符优先级的问题。

因为运算符‘<’ 的优先级比运算符‘=’高。所以pid获取的是后面比较表达式的结果,(fork()<0)。这个结果为假,所以pid=0。所以,父进程,子进程都会输出child  pid[%d]

发现fork容易出错的一个地方

原文:http://www.cnblogs.com/zhangyabin---acm/p/4015692.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!