c语言调用函数while((p1=fork())==-1)是什么意思
sgainhsu的回答就挺好的。
下面是man fork的描述:
creates a child process that differs from the parent process only in its PID and PPID, and in the fact that resource utilizations are set to 0. File locks and pending signals are not inherited.
希望对你能有所帮助。
有关fork的知识可以看:
http://www.cnblogs.com/jeakon/archive/2012/05/26/2816828.html
解释可以是这样的:
当代码运行到 while((p1=fork())==-1); 时会成功创建一个新进程1,此时要注意,在主进程中的fork()返回值是新进程1的id,所以主进程的p1 !=0,但新进程因为没有再产生新进程,因而fork()返回值是0,所以新进程1的p1 ==0,所以主进程将运行 while((p2=fork())==-1); 而新进程1运行putchar('b');(注:用fork产生的新进程几乎是主进程中fork()函数后面代码的克隆,代码几乎一样)
前面的新进程1运行完putchar('b')后程序已经结束,而主进程运行 while((p2=fork())==-1);此时屏幕显示:b
当代码运行到 while((p2=fork())==-1); 时又会成功创建一个新进程2,此时要注意,在主进程中的fork()返回值是又一个新进程2的id,所以主进程的p2 !=0,但新进程2因为没有再产生新进程,因而fork()返回值是0,所以新进程2的p2==0,所以主进程将运行 putchar('a'); 而新进程2运行putchar('c');由于新主进程的打印时间不确定谁先完成,所以可能是ac也可能是ca,所以结果可能是bac也可能是bca
fork函数是在当前进程中新建立一个子进程,如果这个创建子进程失败,那么返回-1,这个实际是把创建进程的返回值和-1比较看看是否创建失败。
因为是写在while语句里,那么当创建失败之后,如果在while里面没有break或者跳出,当while执行体执行结束后又会执行(p1=fork())==-1,等于不断重复创建子进程一直到创建成功为止。
注意这里会返回两次,因为父进程创建子进程的时候复制了父进程的地址空间,那么父子进程地址空间的语句执行都在等待fork返回的那句话里。
所以返回两次是父进程返回一个,返回的是子进程的ID,子进程返回一次,返回的是0.
那么我们根据不同的返回值就可以分别写出我们想要的父子进程的逻辑。
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;
}
}
fork()应该是一个不带参数,返回一个int型数据的函数吧,
while((p1=fork())==-1);的意思是:
调用fork()函数,将返回值交给p1,然后判断p1是否等于-1;
看到这个我想到了,输入多个字符时吸收换行符的办法:
while((ch=getchar())!='\n');
赋值语句p1=fork()和循环语句while(p1==-1)的复合写法
fork函数的返回值赋值给p1,并判断p1是否等于-1,如果等于,则继续执行循环体;否则退出循环
fork是创建进程的系统API,p1=fork())==-1 是创建子进程,并将id赋给p1,然后通过p1和-1比较判断子进程是否创建成功。
python(pandas模块)?
1.什么是pandas? numpy模块和pandas模块都是用于处理数据的模块。 numpy主要用于针对数组进行统计计算,处理数字数据比较方便。 pandas除了可以处理数字数据,还可...
什么是数学
详情请查看视频回答
第六届全国信息技术大赛做过模拟考试的给个答案看看,我只能到94分了...
12.10.c语言中whi1e和do-while循环的主要区别是(A)。A)do-while的循环体至少无条件执行一次 B)while的循环控制条件比do-while的循环控制条件严格 C)do-while允许从外部转到循环体内 D)do-while的循环体不能是复合语句 13.若有说明int *p,m=5,n;以下程序段正确的是(D)。A)p=&n...
数学!!!
因此数学语言的培养是教学中的一个重要内容,经常要让学生“说数学”,数学修养好的人,不仅思维能力和...与这种观点相对应,从古希腊的柏拉图开始,许多人认为数学是研究模式的学问,数学家怀特海(A. N. Whiie...(22)用自守函数将解析函数单值化。 (23)发展变分学方法的研究。 从横向划分: 1.基础数学(Pure Mathema...
国家计算机2级考试是怎么回事啊?考试内容是什么阿?难考吗?
2.数据的输入与输出 ,输入输出函数的调用。3.复合语句。4.goto语句和语句标号的使用。(四)选择结构程序设计 1.用if语句实现选择结构。2.用switch语句实现 多分支选择结构。3.选择结构的嵌套 (五)循环结构程序设计 1.for循环结构。2.while和do whi1e循环结构。3. continue语句和bre ak...
计算机C二级就只要考C语言吗?还要靠其他的吗?比如说WINDOMS的基础知识...
2.数据的输入与输出,输入输出函数的调用。3.复合语句。4.goto语句和语句标号的使用。(四)选择结构程序设计1.用if语句实现选择结构。2.用switch语句实现多分支选择结构。3.选择结构的嵌套(五)循环结构程序设计1.for循环结构。2.while和do whi1e循环结构。3. continue语句和break语句。4.循环的嵌套。(六)数组的...
...我不知道选2级中的VB还是VF还是C语言?我对那个都不了解,计算机考证...
2.数据的输入与输出,输入输出函数的调用。 3.复合语句。 4.goto语句和语句标号的使用。 (四)选择结构程序设计 1.用if语句实现选择结构。 2.用switch语句实现多分支选择结构。 3.选择结构的嵌套 (五)循环结构程序设计 1.for循环结构。 2.while和do whi1e循环结构。 3. continue语句和break语句。 4.循环的...
请教各位 计算机2级主要考什么内容啊
2.数据的输入与输出,输入输出函数的调用。3.复合语句。4.goto语句和语句标号的使用。(四)选择结构程序设计1.用if语句实现选择结构。2.用switch语句实现多分支选择结构。3.选择结构的嵌套(五)循环结构程序设计1.for循环结构。2.while和do whi1e循环结构。3. continue语句和break语句。4.循环的嵌套。(六)数组的...
计算机等级考试2级C的内容是什么?谢
2.数据的输入与输出,输入输出函数的调用。3.复合语句。4.goto语句和语句标号的使用。(四)选择结构程序设计 1.用if语句实现选择结构。2。用switch语句实现多分支选择结构。3.选择结构的嵌套 (五)循环结构程序设计 1.for循环结构。2.While和do whi1e循环结构。。3.continue语句和break语句。...
我报了计算机等级考试的二级C,记些什么东西能过呢?
2.数据的输入与输出,输入输出函数的调用。3.复合语句。4.goto语句和语句标号的使用。(四)选择结构程序设计 1.用if语句实现选择结构。2。用switch语句实现多分支选择结构。3.选择结构的嵌套 (五)循环结构程序设计 1.for循环结构。2.While和do whi1e循环结构。。3.continue语句和break语句。...
骑音膦甲: sgainhsu的回答就挺好的.下面是man fork的描述:creates a child process that differs from the parent process only in its PID and PPID, and in the fact that resource utilizations are set to 0. File locks and pending signals are not inherited.
呼玛县13916508007: C语言WHILE循环再指针函数 - ?
骑音膦甲: 执行fun(a,7);p1=a p2指向a[6] 即'G' 然后 s=*p1++= 'A' p1自加指向a[1] *p1=*p2-- = 'G' a[1] = 'G' p2->a[5] a[5] = *p2 = s = 'A' 第二次循环 s=*p1++=a[1]='G' p1->a[2] a[2] = *p1 = *p2-- = a[5] = 'A' p2->a[4] a[4] = *p2 = s = 'G' 第三次循环 s=*p1++=a[2]='...
呼玛县13916508007: c语言“while(p1!=NULL && strcmp(p1 - >tele,str)) ”这个语句什么意思?请帮帮我,谢谢 - ?
骑音膦甲: p1应该是一个结构体或者说是类 p1->tele是指p1包含的一个字符串 或者是字符数组 strcmp(p1->tele,str)) 就是比较p1->tele和str大小的 按照字典顺序比较abc和def这样子 while(p1!=NULL && strcmp(p1->tele,str)) ”这个语句就是指p1不是空并且比较的结果为正
呼玛县13916508007: C语言中如何调用函数求最大公约数和最小公倍数 - ?
骑音膦甲: #include<stdio.h> int a; int _Y(int x,int y); int main() { int a,b,c,d; printf(“请输入数字:”); scanf("%d,%d",&c,&d);//此处注意在输出的时候数字之间要打都好,不然输出结果错误 b=_Y(c,d); a=c*d/b; printf(“最大公约数为:%d\n”,b); printf(“最...
呼玛县13916508007: 帮忙解释下这个C语言程序 - ?
骑音膦甲: #include<stdlib.h> #include<stdio.h> int main() { int p1 ,p2,i; //定义三个整形变量 p1,p2,i while((p1=fork())==-1); //p1=fork(),fork()是一个函数返回值为整形,如果p1=-1就循环(代码这里应是个错误,while应该有循环体,这里没有循环体就会...
呼玛县13916508007: c语言通过调用函数实现对所输入的任意两个正数,交换它们的值 - ?
骑音膦甲: swap(int * &p1,int * &p2) { int *p; *p=*p1; *p1=*p2; *p2=*p; }void swap(int &a,int b) {a=a^b;b=a^b;a=a^b; }void swap(int& a,int& b) {a= a+b;b= a-b;a= a-b; } 给点分啊
呼玛县13916508007: c语言关于while语句的疑问 - ?
骑音膦甲: while(*(p1+i)==*(p2+i)) if(*(p1+i++)=='\0') //只有这句是跟随while的! return(0); return(*(p1+i)-*(p2+i)); //这句不在while中的 写程序一要注意格式,二要注意使用{},修改如下,方便看:while(*(p1+i)==*(p2+i)) //当条件不成立时,程序跳到}之后的语句!!是不是理解偏激了啊?{ if(*(p1+i++)=='\0')return(0); } return(*(p1+i)-*(p2+i));
呼玛县13916508007: C语言中void main(){ init();while(1){ }; }是什么意思 - ?
骑音膦甲: 你的init是单片机初始化,执行初始化之后,程序执行while(1){};这条语句的意思就是程序到这进入死循环,当有中断响应的时候执行 time这个函数,没有中断响应的时候,cpu一直在while(1){};中等待中断信号.
呼玛县13916508007: c语言 请分别用for循环,while循环和函数调用三种方法来实现求n! - ?
骑音膦甲: 1#include #include int main() { int i = 1; int n; int s = 1; scanf("%d",&n); while(i{ s = s*i; i++; } printf("s = %d\n",s); }2#include #include int main() { int i = 1; int n; int s = 1; scanf("%d",&n); for(i = 1; i s = s*i; printf("%d! = %d\n",n,s); }3.#...
呼玛县13916508007: 已定义以下函数 C语言 - ?
骑音膦甲: 很明显是复制!单看*p2=*p1什么意思?--把p1的值赋给p2.就是复制!再看while(..!='\0')什么意思?、--复制直到字符串结束..