fork()与写时拷贝~


父子进程哪一个先调动呢?
一般来说,会选择让子进程先走,理由是:如果子进程要调用exec(),则就会清空代码段、数据段、堆栈段的东西,即给它一个物理空间了就,如果让父进程先走,父进程发生写时拷贝了,子进程有一份物理空间,再调用exec,又更新一次,浪费时间和内存。

Fork以后,父进程打开的文件指针位置在子进程里面是否一样?
代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>

int main()
{
     int fd = open("a.txt", O_RDONLY);

     char buff[128] = {0};
     int count = read(fd,buff,1);

     if (fd == -1)
     {
           printf("File open failed : %s\n", strerror(errno));
     }
     pid_t pd = fork();
     if (pd > 0)
     {
           printf("buff = %s,count = %d\n",buff,count);
           printf("father fd = %d\n", fd);
     }
    else
    {
           int tmp = read(fd,buff,2);
           printf("buff = %s\n",buff);
        printf("son fd = %d\n", fd);
           exit(0);
     }
    wait(pd);
     close(fd);
    return 0;
}

可以看出 子进程再进行读取时,是从父进程之后的位置读取的,所以说, 父进程打开的文件指针位置在子进程里面是一样的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值