LinuxSir.cn,穿越时空的Linuxsir!

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

突然想不明白if...else..结构了,大家给小弟解释解释!

[复制链接]
发表于 2005-2-16 16:55:18 | 显示全部楼层 |阅读模式
大家先看看吧:


  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>

  4. int main(void){
  5.    if(fork()==0){
  6.      puts("This is child process!\n");
  7.      exit(EXIT_SUCCESS);
  8.    }
  9.    else{
  10.      puts("This is parent process!\n");
  11.      eixt(EXIT_SUCCESS);
  12.    }
  13.    return ;
  14. }
复制代码


我没有检测fork()失败的情况,写简单点.

fork()返回了两次,而我只是用了一次if,就能判断两次fork()返回的结果了,而且exit()没有执行的.我现在不明白了. :help

我用gdb调试,在断点之前肯定会输出一个,比如在puts("this is child......那句断了,但是...parent那句就会得到了执行.难道if可以判断两次???

以前一直这样用着,没想过,现在想不明白!
:ask
发表于 2005-2-16 21:40:42 | 显示全部楼层
please man fork
回复 支持 反对

使用道具 举报

发表于 2005-2-16 22:05:34 | 显示全部楼层
fork返回2个直的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-16 22:33:57 | 显示全部楼层
我知道返回两个值呀.我就是不明白IF...ELSE怎么能判断两个值!
比如:fork()返回第一个值后,if判断了一次,执行完后,应该是跳出了if..else..了,那第二值又怎么能判断得到呢?
回复 支持 反对

使用道具 举报

发表于 2005-2-17 10:01:00 | 显示全部楼层
给每个进程返回一个值,两个值是分别返回给两个进程的,每个进程得到的是一个值,实际上还是返回一个
值,只不过在父进程和子进程的返回值不一样而已。
两个添加的代码都会被执行的,一个在父进程执行一个在子进程执行。
回复 支持 反对

使用道具 举报

发表于 2005-2-17 16:21:32 | 显示全部楼层
楼上的不错,你在每个判断里面加个getpid()函数就知道了,不是1个进程
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-17 17:08:51 | 显示全部楼层
明白,多谢各位!
回复 支持 反对

使用道具 举报

发表于 2005-2-17 21:35:41 | 显示全部楼层
Post by randypig
我知道返回两个值呀.我就是不明白IF...ELSE怎么能判断两个值!
比如:fork()返回第一个值后,if判断了一次,执行完后,应该是跳出了if..else..了,那第二值又怎么能判断得到呢?

从folk()那儿开始就是父子线程同时从那儿运行的,从那儿开始父子线程的代码就是一样的啦
所以就用返回的值是否为0来判断该线程是父还是子,便于你要进行的操作
这是偶的理解
回复 支持 反对

使用道具 举报

发表于 2005-2-18 13:35:35 | 显示全部楼层
程序是指静态的代码,代码运行起来就是进程了.同一段代码的2个进程是分别执行的.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-20 19:21:14 | 显示全部楼层
谢谢楼上两位,小弟一下子头脑发昏,没想明白,呵呵,现在明白了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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