linux fork 深入讲解(对打开文件的处理)
来源:互联网 发布:linux 笔试题 编辑:程序博客网 时间:2024/05/17 06:10
当父进程调用fork函数时, 新创建的子进程几乎但不完全与父进程相同, 子进程会获得一份父进程用户级虚拟地址空间的拷贝, 但是此拷贝是独立的, 拷贝内容包括文本、数据和bss段、堆以及用户栈。 子进程有一份自己的虚拟地址空间, 里面存放着和父进程相同的一份代码、数据、用户栈的拷贝, 而且是与父进程的地址空间是独立的。扩展: 在父进程创建新的子进程时, 子进程还会获得与父进程打开文件描述符相同的拷贝, 也就是说, 当父进程调用fork函数时, 子进程可以读写父进程中打开的任何文件。 父进程和子进程之间的最大区别在于它们有不同的PID。
#include<sys/types.h>
#include<stdio.h>#include<unistd.h>
#include<fcntl.h>
#include<string.h>
#include<stdlib.h>
int main(){
pid_t pid;
int fd;
int i=1;
int status;
char *ch1="hello";
char *ch2 ="world";
char *ch3 ="IN";
if((fd=open("test.txt",O_RDWR|O_CREAT,0644))==-1)
{
perror("parent open");
exit(EXIT_FAILURE);
}
if(write(fd,ch1,strlen(ch1)==-1))
{
perror("parent write");
exit(EXIT_FAILURE);
}
if((pid=fork()==-1))
{
perror("fork");
exit(EXIT_FAILURE);
}
else if(pid==0){
i=2;
printf("in child\n");
printf("i=%d\n",i);
if(write(fd,ch2,strlen(ch2))==-1)
{
perror("child write");
}
return 0;
}
else{
sleep(1);
printf("in parent\n");
printf("i=%d\n",i);
if(write(fd,ch3,strlen(ch3))==-1)
{
perror("parent write");
}
wait(&status);
return 0;
}
return 1;
}
编译后输出:
in child
i=2
in parent
i=1
0 0
- linux fork 深入讲解(对打开文件的处理)
- Linux/UNIX的fork()函数讲解
- Linux中fork()函数讲解(转载)
- Linux进程,fork-专研精讲(实例讲解)!!!
- Linux Fork函数讲解
- fork & exec时打开文件的变化
- Linux fork与vfork的深入分析
- 深入理解Linux的fork函数
- linux shell 对两个文件的处理
- linux下内核对打开的文件结构的表示
- Linux 进程之fork()讲解
- linux编程|fork函数讲解
- linux编程|fork函数讲解
- linux下fork()函数讲解
- linux中fork()函数详解(原创!!实例讲解)--写的太好了转过来
- linux系统调用fork()、vfork()、clone()讲解
- linux中fork()函数详解(原创!!实例讲解)
- linux中fork()函数详解(原创!!实例讲解)
- FZU2171 防守阵地 II (线段树)
- JS实现大数(整数)相乘
- 在String.xml中使用特殊符号
- oracle11g数据库如何正确导入dmp文件数据
- 怎样改变Tooltip的大小
- linux fork 深入讲解(对打开文件的处理)
- Python核心编程第十章笔记
- 课程设计
- mysql 根据select结果进行循环操作,并写入临时表
- zookeeper python接口
- poj 1611 The Suspects(并查集模板题)
- win7操作系统配置环境变量
- 免杀基础知识总结
- 关键字之this和super