1 子进程复制父进程的数据段、BBS段、代码段、堆空间、栈空间和文件描述符
2 对于文件描述符采用共享的方式 后面这个例子可以清晰的看出
1 #include <sys/types.h> 2 #include <stdio.h> 3 #include <unistd.h> 4 #include <fcntl.h> 5 #include <string.h> 6 #include <stdlib.h> 7 8 int main() 9 { 10 pid_t pid; 11 int fd;//文件描述符 12 int i=1; 13 int status; 14 char *ch1 = "nihao"; 15 char *ch2 = "china"; 16 char *ch3 = "yes"; 17 18 if((fd=open("test.txt",O_RDWR|O_CREAT,0644))==-1)//不存在就创建 19 { 20 perror("parent open"); 21 exit(EXIT_FAILURE); 22 } 23 //父进程向文件写入数据 24 if(write(fd,ch1,strlen(ch1))==-1) 25 { 26 perror("parent open"); 27 exit(EXIT_FAILURE); 28 } 29 //创建新进程 30 if((pid=fork())==-1) 31 { 32 perror("fock"); 33 exit(EXIT_FAILURE); 34 } 35 else if(pid==0) 36 { 37 i=2; 38 printf("in child ");//打印i的值 以与父进程进行区别 39 printf("i=%d ",i); 40 if(write(fd,ch2,strlen(ch2))==-1)//写文件 与父进程共享 41 { 42 perror("child write"); 43 return 0; 44 } 45 }else 46 { 47 sleep(1);//等待子进程先完成 48 printf("in parent "); 49 printf("i=%d ",i); 50 if(write(fd,ch3,sizeof(ch3))==-1) 51 { 52 perror("parent,write"); 53 } 54 wait(&status); 55 return 0; 56 } 57 58 return 1; 59 }
结果分析:
父子进程对于局部变量执行复制操作 而对于文件描述符的文件表项信息则是共享使用。