linux中vfork对打开文件的处理
2024-08-25 06:46:31
vfork和fork
fork()函数是拷贝一个父进程的副本,拥有独立的代码段 数据段 堆栈空间 然而vfork是共享父亲进程的代码以及代码段
vfork是可以根据需要复制父进程空间,这样很大程度的提高勒性能。
1 例子vfork检测 子进程和父进程值是否一样
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <error.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h> int glob = ;//全局已经初始化的变量 位于数据段
int main()
{
int var;
pid_t pid;
var = ;
printf("最开始的glob=%d\tvar=%d\n",glob,var);//输出初始的值
if((pid=vfork())<)
{
perror("vfork");
exit(EXIT_FAILURE);
}else if(pid==)
{
printf("在子进程中,修改后的glob和var为\n");
glob++;//子进程修改全局变量
var++;//子进程修改局部变量
printf("在子进程中\tglob=%d\tvar=%d\n",glob,var);
_exit();
}else//父进程打印
{
printf("在父进程中\tglob=%d\tvar=%d\n",glob,var);
return ;
}
return ;
}
结果发现:子进程和父进程共享数据空间
2 当把上面的代码vfork改变为fork后的执行结果如下:
结果发现:fork函数创建子进程时候 子进程是父进程的一份拷贝
最新文章
- HDU5887 Herbs Gathering(2016青岛网络赛 搜索 剪枝)
- PHP foreach使用
- [Android]Unit Test for Android
- linq 多表分组查询统计
- Cocos2d-x移植到WindowsPhone8移植问题-libcurl库移植问题
- C++中explicit
- c++STL之sort排序
- 【深度学习系列】PaddlePaddle之手写数字识别
- 201621123040《Java程序设计》第六周学习总结
- javascript之cookie对象
- 使用proces explorer查看系统gdi
- html布局(盒子)
- Apollo 10 — adminService 全量发布
- IE6浏览器无法打开QQ邮箱
- My strength (C-A-R)
- 使用Redis做为MySQL的缓存
- localstorage和vue结合使用
- 【转载】windows 下重置 mysql 的 root 密码
- neovim在win10下安装配置
- 将java程序打包成exe文件