zoukankan      html  css  js  c++  java
  • linux中vfork对打开文件的处理

    vfork和fork

      fork()函数是拷贝一个父进程的副本,拥有独立的代码段 数据段 堆栈空间 然而vfork是共享父亲进程的代码以及代码段

      vfork是可以根据需要复制父进程空间,这样很大程度的提高勒性能。

    1 例子vfork检测 子进程和父进程值是否一样

     1 #include <sys/types.h>
     2 #include <stdio.h>
     3 #include <unistd.h>
     4 #include <error.h>
     5 #include <fcntl.h>
     6 #include <string.h>
     7 #include <stdlib.h>
     8 
     9 int glob = 8;//全局已经初始化的变量 位于数据段
    10 int main()
    11 {
    12     int var;
    13     pid_t pid;
    14     var = 99;
    15     printf("最开始的glob=%d	var=%d
    ",glob,var);//输出初始的值
    16     if((pid=vfork())<0)
    17     {
    18         perror("vfork");
    19         exit(EXIT_FAILURE);
    20     }else if(pid==0)
    21     {
    22         printf("在子进程中,修改后的glob和var为
    ");
    23         glob++;//子进程修改全局变量
    24         var++;//子进程修改局部变量
    25         printf("在子进程中	glob=%d	var=%d
    ",glob,var);
    26         _exit(0);
    27     }else//父进程打印
    28     {
    29         printf("在父进程中	glob=%d	var=%d
    ",glob,var);
    30         return 0;
    31     }
    32     return 1;
    33 }

    结果发现:子进程和父进程共享数据空间

    2 当把上面的代码vfork改变为fork后的执行结果如下:

    结果发现:fork函数创建子进程时候 子进程是父进程的一份拷贝

  • 相关阅读:
    特性(Attribute)
    泛型
    AngularJS 基础用法
    js date相关学习!
    android 数据存储分配的一些事
    angularjs model.service vs provider vs factory?
    angularJS 判断
    zepto.js 学习之(一)
    angularJS Directive学习
    AngularJS继续中
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/6874217.html
Copyright © 2011-2022 走看看