多进程 fork之后父子进程 对文件描述符的作用
2016-01-03 23:42
274 查看
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
int main()
{
int fd = open("data",O_WRONLY | O_CREAT, 0777);
int pid = -1;
int stat;
if(fd == -1)
{
printf("文件打开失败\n");
}
if((pid = fork()) > 0)
{
write(fd,"12345", strlen("12345"));
close(fd);
waitpid(pid ,&stat ,0);
}
else if(pid == 0)
{
write(fd,"6789", strlen("6789"));
close(fd);
}
return 0;
}
测试结果
[wuliande@bogon 1]$ ls
1.c 1.o data makefile mytest unpv13e
[wuliande@bogon 1]$ cat data
123456789[wuliande@bogon 1]$
子进程获得了父进程的文件描述符
并且两个文件描述符 指向了一个文件表 当父进程写入 12345 时文件偏移量被改写
所以最后的结果没有6789没有覆盖1234
所以当fork之后 1.要关闭自己不用的文件描述符
2.对指向同一文件符表的描述符 要进行同步
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
int main()
{
int fd = open("data",O_WRONLY | O_CREAT, 0777);
int pid = -1;
int stat;
if(fd == -1)
{
printf("文件打开失败\n");
}
if((pid = fork()) > 0)
{
write(fd,"12345", strlen("12345"));
close(fd);
waitpid(pid ,&stat ,0);
}
else if(pid == 0)
{
write(fd,"6789", strlen("6789"));
close(fd);
}
return 0;
}
测试结果
[wuliande@bogon 1]$ ls
1.c 1.o data makefile mytest unpv13e
[wuliande@bogon 1]$ cat data
123456789[wuliande@bogon 1]$
子进程获得了父进程的文件描述符
并且两个文件描述符 指向了一个文件表 当父进程写入 12345 时文件偏移量被改写
所以最后的结果没有6789没有覆盖1234
所以当fork之后 1.要关闭自己不用的文件描述符
2.对指向同一文件符表的描述符 要进行同步
相关文章推荐
- androidstudio之toolbar
- 源代码管理工具GIT
- 获取指定表的创建脚本
- studio-引入外来包
- 2016年最值得关注的大数据领域33大预测
- js操作页面布局管理
- 多线程之-NSOperation
- 【Node.js】新建一个NodeJS 4.X项目
- 算法导论3:最大子数组问题 2016.1.3
- VS中的波浪线
- UISrcoll控件简单介绍
- [How to] 动态布局可变高度的cell的应用
- 《深入解析windows操作系统第6版下册》第10章:内存管理(第三部分译文与图片)
- How to use GIT?
- Java实战_局域网多人聊天室
- 集群下处理请求的时序问题
- Linux 多播(组播)例程
- 受用不尽的Gradle使用方法与技巧
- MySQL单机多实例安装并配置主从复制
- 专家的博客