为什么if和else语句可能在单次运行时执行?

时间:2013-04-28 10:36:01

标签: networking sockets pipe

我正在学习socket编程,我对c编程很了解。

例如,根据我的c编程知识,一旦处理了else语句中的某些内容,相应的if语句中的代码就不应该被执行。例如,

int a = 1;
if(a == 1) process1 ;
else process2;

根据上述声明,a等于1,因此应执行process1并且不会执行process2。我相信这是正确的。

我的问题用以下代码说明:

int main(void){
   pid_t pid;
   int pp[2];

   pipe(pp);

   pid = fork();
   if(pid == 0){
      printf("Processed pid == 0\n");
   }else{
      printf("Processed pid != 0\n");
   }

   return 0;
}

运行此程序时,我得到以下输出:

Processed pid == 0
Processed pid != 0

我的问题是为什么显示ifelse语句的结果?

1 个答案:

答案 0 :(得分:2)

Fork用于创建新进程。在旧过程中,它返回新进程的pid,在新进程中返回0.输出的每一行都由不同的进程打印。

http://linux.die.net/man/2/fork

帮助您了解: 从调用fork()的那一刻起,还有一个进程正在执行您编写的程序。为了让这两个进程做不同的事情,fork()在原始进程和副本中返回不同的值。正如我所写,原始进程接收新进程的pid,这对于两个进程之间的进一步通信非常有用。