• linux中fork对打开文件的处理


    1 子进程复制父进程的数据段、BBS段、代码段、堆空间、栈空间和文件描述符

    2 对于文件描述符采用共享的方式 后面这个例子可以清晰的看出

     1 #include <sys/types.h>
     2 #include <stdio.h>
     3 #include <unistd.h>
     4 #include <fcntl.h>
     5 #include <string.h>
     6 #include <stdlib.h>
     7 
     8 int main()
     9 {
    10     pid_t pid;
    11     int fd;//文件描述符
    12     int i=1;
    13     int status;
    14     char *ch1 = "nihao";
    15     char *ch2 = "china";
    16     char *ch3 = "yes";
    17     
    18     if((fd=open("test.txt",O_RDWR|O_CREAT,0644))==-1)//不存在就创建
    19     {
    20         perror("parent open");
    21         exit(EXIT_FAILURE);
    22     }
    23     //父进程向文件写入数据
    24     if(write(fd,ch1,strlen(ch1))==-1)
    25     {
    26         perror("parent open");
    27         exit(EXIT_FAILURE);
    28     }
    29     //创建新进程
    30     if((pid=fork())==-1)
    31     {
    32         perror("fock");
    33         exit(EXIT_FAILURE);
    34     }
    35     else if(pid==0)
    36     {
    37         i=2;
    38         printf("in child
    ");//打印i的值 以与父进程进行区别
    39         printf("i=%d
    ",i);
    40         if(write(fd,ch2,strlen(ch2))==-1)//写文件 与父进程共享
    41         {
    42             perror("child write");
    43             return 0;
    44         }
    45     }else
    46         {
    47             sleep(1);//等待子进程先完成
    48             printf("in parent
    ");
    49             printf("i=%d
    ",i);
    50             if(write(fd,ch3,sizeof(ch3))==-1)
    51             {
    52                 perror("parent,write");
    53             }
    54             wait(&status);
    55             return 0;
    56         }
    57     
    58     return 1;
    59 }

    结果分析:

      父子进程对于局部变量执行复制操作 而对于文件描述符的文件表项信息则是共享使用。

  • 相关阅读:
    其他
    Win10
    Win10
    面向对象与设计模式
    Git
    Java
    Git
    Git
    Git
    一、I/O操作(File文件对象)
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/6874030.html
Copyright © 2020-2023  润新知