LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2115|回复: 12

关于if((pid=fork())==0),到底什么意思啊

[复制链接]
发表于 2005-4-10 00:34:14 | 显示全部楼层 |阅读模式
关于if((pid=fork())==0),到底什么意思啊
是说如果(1).pid=fork()赋值成功则不符合条件,还是说(2)pid=0时符合条件啊,我记得是赋值成立时候就不成立了,可今天在书上看到了,有点迷惑了 :ask
发表于 2005-4-10 01:34:16 | 显示全部楼层
等价于
pid = fork();
if(pid == 0)...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-10 08:59:35 | 显示全部楼层
呵呵,谢谢了
那么if((pid=fork()))呢?
回复 支持 反对

使用道具 举报

发表于 2005-4-10 09:15:03 | 显示全部楼层
Post by eric451
呵呵,谢谢了
那么if((pid=fork()))呢?


好象是这样的:在一个程序里使用这个来创建其子进程,子进程同父进程几乎完全一样(也有fork()这样一句),但是子进程和父进程获得的fork返回值不一样,子进程fork()调用返回的是0,父进程不是。

判断是否为0就能区别正在执行的代码是父进程的还是子进程的了。
回复 支持 反对

使用道具 举报

发表于 2005-4-10 09:45:00 | 显示全部楼层
if(pid=fork())
应该是赋值成功吧
对父进程来说符合条件
对子进程来说它并没有执行fork();所以不符合条件

那么if(pid=fork())是判断是否为父进程
if((pid=fork())==0)判断是否为子进程
不知道对不对:)
回复 支持 反对

使用道具 举报

发表于 2005-4-10 10:42:43 | 显示全部楼层
Post by eric451
呵呵,谢谢了
那么if((pid=fork()))呢?
这样不好吧
无法区分是创建失败还是创建成功后的父进程
除非接下来这样
  1. if((pid=fork())){
  2. if(pid != -1)
  3.    //statements for parent process
  4. else
  5.    //statements for handling error
  6. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-10 12:16:25 | 显示全部楼层
呵呵,我的错,举例有点不恰当,我的意思是说
if((pid=fork()))这句语句是以赋值是否成立为判断依据还是以pid的值为判断依据,具体不用考虑语句含义
回复 支持 反对

使用道具 举报

发表于 2005-4-10 22:02:13 | 显示全部楼层
晕,赋值还会出错吗?
回复 支持 反对

使用道具 举报

发表于 2005-4-11 12:30:08 | 显示全部楼层
Post by eric451
呵呵,我的错,举例有点不恰当,我的意思是说
if((pid=fork()))这句语句是以赋值是否成立为判断依据还是以pid的值为判断依据,具体不用考虑语句含义


当然是以pid的值啦
不过这样就和你原来if ((pid = fork()) == 0)的意思相反了
回复 支持 反对

使用道具 举报

发表于 2005-4-11 19:46:35 | 显示全部楼层
fork()就是建立子进程,返回子进程的pid,我们知道pid是不会为0的,所以若返回为0,证明创建失败。
不知道对不对,偶刚学linux/c,以前看了点书。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表