linux中fork对打开文件的处理
2024-08-28 08:33:34
1 子进程复制父进程的数据段、BBS段、代码段、堆空间、栈空间和文件描述符
2 对于文件描述符采用共享的方式 后面这个例子可以清晰的看出
#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=;
int status;
char *ch1 = "nihao";
char *ch2 = "china";
char *ch3 = "yes"; if((fd=open("test.txt",O_RDWR|O_CREAT,))==-)//不存在就创建
{
perror("parent open");
exit(EXIT_FAILURE);
}
//父进程向文件写入数据
if(write(fd,ch1,strlen(ch1))==-)
{
perror("parent open");
exit(EXIT_FAILURE);
}
//创建新进程
if((pid=fork())==-)
{
perror("fock");
exit(EXIT_FAILURE);
}
else if(pid==)
{
i=;
printf("in child\n");//打印i的值 以与父进程进行区别
printf("i=%d\n",i);
if(write(fd,ch2,strlen(ch2))==-)//写文件 与父进程共享
{
perror("child write");
return ;
}
}else
{
sleep();//等待子进程先完成
printf("in parent\n");
printf("i=%d\n",i);
if(write(fd,ch3,sizeof(ch3))==-)
{
perror("parent,write");
}
wait(&status);
return ;
} return ;
}
结果分析:
父子进程对于局部变量执行复制操作 而对于文件描述符的文件表项信息则是共享使用。
最新文章
- [转] STM32各种时钟的区别
- Java学习——HashMap
- MongoDB中insert方法、update方法、save方法简单对比
- ArrayList的使用方法(转载)
- @SpringBootApplication
- C#验证子网掩码的正确性
- eclipse中tomcat配置(待完善)
- 九度OJ 1207 质因数的个数
- CodeForces 361B 	Levko and Permutation
- android109 结构体,联合体,枚举,自定义
- coco2dx 精灵类
- java-四个线程修改一个变量
- Oracle odi 数据表导出到文件
- springmvc 对 jsonp 的支持
- Dynamics 365 CE命令栏按钮点击后刷新表单页面方法
- SolidWorks装配体
- html基础知识梳理
- 在线流媒体nginx/Windows解决方案
- 百度APP爬虫
- java新特性