父子进程哪一个先调动呢?
一般来说,会选择让子进程先走,理由是:如果子进程要调用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;
}