c语言调用函数while((p1=fork())==-1)是什么意思

(p1=fork())==-1是什么情况?

那这个函数是什么意思呢?
int p1,p2;
while((p1=fork())==-1);
if(p1!=0)
{
while((p2=fork())==-1);
if(p2==0) putchar('b');
else putchar('c');
}
else putchar('a');

说是父进程就输出a,子进程就输出b和c,无法理解啊

  c语言调用函数while((p1=fork())==-1)的意思是:
  fork函数是在当前进程中新建立一个子进程,如果这个创建子进程失败,那么返回-1,这个实际是把创建进程的返回值和-1比较看看是否创建失败。
  因为是写在while语句里,那么当创建失败之后,如果在while里面没有break或者跳出,当while执行体执行结束后又会执行(p1=fork())==-1,等于不断重复创建子进程一直到创建成功为止。
  注意这里会返回两次,因为父进程创建子进程的时候复制了父进程的地址空间,那么父子进程地址空间的语句执行都在等待fork返回的那句话里。
  所以返回两次是父进程返回一个,返回的是子进程的ID,子进程返回一次,返回的是0.
  那么我们根据不同的返回值就可以分别写出我们想要的父子进程的逻辑。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-14
fork函数是在当前进程中新建立一个子进程,如果这个创建子进程失败,那么返回-1,这个实际是把创建进程的返回值和-1比较看看是否创建失败。
因为是写在while语句里,那么当创建失败之后,如果在while里面没有break或者跳出,当while执行体执行结束后又会执行(p1=fork())==-1,等于不断重复创建子进程一直到创建成功为止。
注意这里会返回两次,因为父进程创建子进程的时候复制了父进程的地址空间,那么父子进程地址空间的语句执行都在等待fork返回的那句话里。
所以返回两次是父进程返回一个,返回的是子进程的ID,子进程返回一次,返回的是0.
那么我们根据不同的返回值就可以分别写出我们想要的父子进程的逻辑。

#include <iostream>
#include<unistd.h>

#include<sys/types.h>

int main()
{
int p = -1;
while ( (p = fork()) == -1 )
{
std::cout << "create process failed!" << std::endl;
}
if (p == 0)
{
std::cout << "this is in the child process!" << std::endl;
}
esle
{
std::cout << "this is in the father process!" << std::endl;
}
}追问

if(p1!=0)
{
.......
}
else putchar('a');

说是父进程就输出a,怎么回事呢?

第2个回答  2012-11-14
fork()应该是一个不带参数,返回一个int型数据的函数吧,
while((p1=fork())==-1);的意思是:
调用fork()函数,将返回值交给p1,然后判断p1是否等于-1;

看到这个我想到了,输入多个字符时吸收换行符的办法:
while((ch=getchar())!='\n');
第3个回答  2012-11-14
赋值语句p1=fork()和循环语句while(p1==-1)的复合写法
fork函数的返回值赋值给p1,并判断p1是否等于-1,如果等于,则继续执行循环体;否则退出循环追问

好的,可以解释下补充里的那个函数吗?

追答

我也不知道你的fork是怎么个函数啊。
fork可以获取其他线程的状态?或是类似getchar这样的输入函数?

追问

还是谢谢了

第4个回答  2012-11-15
fork是创建进程的系统API,p1=fork())==-1 是创建子进程,并将id赋给p1,然后通过p1和-1比较判断子进程是否创建成功。追问

if(p1!=0)
{
.......
}
else putchar('a');

说是父进程就输出a,怎么回事呢?

相似回答