자식 프로세스가 부모 프로세스에서 분기되면 부모 프로세스의 모든 변수가 새 자식 프로세스에 복사됩니다. 따라서 fork가 일어나기 전에 공통 파일을 열고 부모와 자식 모두에서 동일한 파일을 읽으려고하면 결과 모두를 독립적으로 인쇄해야합니다. 하지만 이것을 구현하려고 할 때, 부모와 자식을위한 파일 읽기가 인터리브 된 것처럼 보입니다. 왜 이런 일이 일어나는지 알아야합니다. 새로운 프로세스가 부모로부터 분기 될 때 파일 기술자조차도 복제되어야한다. 그래서 뭐가 잘못 됐어?fork()의 filedescriptor 동작
#include<stdio.h>
#include<fcntl.h>
main()
{
int fp;
char buff[11];
int pid;
fp = open("file1.txt", O_RDONLY);
pid = fork();
if(pid==0)
{
printf("Child begins %d\n", getpid());
read(fp, buff, 5);
buff[10] = '\0';
printf("Child read:");
puts(buff);
printf("Child exiting\n");
}
else
{
read(fp, buff, 5);
buff[10] = '\0';
printf("Parent read:");
puts(buff);
printf("Parent exiting\n");
}
}
이제 file1.txt의 콘텐츠가 "Hello world"라고 가정하면 상위 프로세스와 하위 프로세스 모두 "Hello"가 인쇄되어야합니다. 하지만 내가 본 것은 아이/부모 프린트 중 하나 인 "Hello"이고 다른 하나는 "world"입니다.