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);
}
/*
* 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);
}
相关文章推荐
- APUE2e之Exercise 3.2
- APUE2e之Exercise 10.6 Solution A
- APUE2e之Exercise 10.6 Solution B
- APUE2e之Exercise 10.6 Solution C
- APUE2e之Exercise 10.11
- APUE2e之Exercise 16.3 Solution B
- Selected solutions to exercise of "The C Programming Language" 2e (Part 4)
- SQL Server 2005与DB2 8.2之对比
- Think in java 答案_Chapter 2_Exercise 10
- Think in java 答案_Chapter 4_Exercise 4
- Think in java 答案_Chapter 4_Exercise 20
- Mercury测试管理工具Quality Center 8.2下载
- Porting to DB2. Universal Database. Version 8.2
- [THINKING IN C++]CHAPTER 03:EXERCISE 06
- 卡耐基 ssd6 exercise1
- [原]spring学习笔记8.2动态代理基础
- SQLyog Ultimate 8.2 旗舰版
- Exercise
- K&R C Bible Exercise 3-2
- linux 下安装 postgres8.2