码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-10-10 14:50:40      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   for   sp   div   问题   

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

#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容易出错的一个地方

标签:style   blog   color   io   ar   for   sp   div   问题   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!