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函数创建子进程时候 子进程是父进程的一份拷贝

  • 相关阅读:
    全区停水,测什么时候来水。
    和电脑打国标麻将,一定要注意
    这是一个可怕的交易
    起一卦,还是这样。什么时候能好起来。
    Linux内核源码真是个好东西
    命宫——天机化忌
    bzoj1024[SCOI2009]生日快乐
    bzoj2561最小生成树
    bzoj2423[HAOI2010]最长公共子序列
    bzoj2705[SDOI2012]Longge的问题
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/6874217.html
Copyright © 2011-2022 走看看