您的位置:首页 > 产品设计 > UI/UE

APUE2e之Exercise 8.2

2012-09-28 04:39 288 查看
vfork v.s. fork

/*
* exercise8-2.c
*
* Created on: Nov 10, 2011
* Author: zhuhuang
*/

#include <apueerr.h>

int glob = 6;

int callvfork(void)
{
int var=88;
pid_t pid;

//compare the running results using vfork and fork

/* Using fork
in main first:4656
before callvfork
in callvfork parent:4656
glob: 6, var: 88
in main second:4656
after callvfork
before anothercall
in anothercall:4656
after anothercall
in callvfork child:4661
in main second:4661
after callvfork
before anothercall
in anothercall:4661
after anothercall
*/

/* Using vfork
in main first:4608
before callvfork
in callvfork child:4613
in main second:4613
after callvfork
before anothercall
in anothercall:4613
after anothercall
in callvfork parent:4608
glob: 7, var: 2077184
*/

if((pid = fork()) < 0){
err_sys("vfork error");
}else if(pid == 0){
//the increasing of the variables done by the child changes the values in the parent
glob++;
printf("in callvfork child:%dn", getpid());
return 0;
}

printf("in callvfork parent:%dn", getpid());
printf("glob: %d, var: %dn", glob, var); //var is
}

int anothercall(void)
{
int i;
int buf[100];

for(i=0;i<100;i++)
buf[i]=1;

printf("in anothercall:%dn", getpid());
}

int main(void)
{
printf("in main first:%dn", getpid());

printf("before callvforkn");
callvfork();

//Using vfork: child process continues to execute the following code. But parent process doesn't.
//Using fork: both child and parent processes execute the following code.
printf("in main second:%dn", getpid());

printf("after callvforkn");
printf("before anothercalln");
anothercall();
printf("after anothercalln");

exit(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  variables