fork()에 대해서
햇햇
main()
{
FILE *fp;
char line[512];
fp = fopen(data.txt, r);
fgets(line, 512, fp);
fprintf(stderr, before fork: %s, line);
if (fork() 0) { /* parent process */
sleep(3);
fgets(line, 512, fp);
fprintf(stderr, parent process: %s, line);
}
else { /* child process */
fgets(line, 512, fp);
fprintf(stderr, child process: %s, line);
}
fgets(line, 512, fp);
fprintf(stderr, after fork: %s, line);
}
-------------------------------------------------------
data.txt
Hello My World 1
Hello My World 2
Hello My World 3
Hello My World 4
Hello My World 5
Hello My World 6
Hello My World 7
-------------------------------------------------------
출력
before fork: Hello my world 1
child process: Hello my world 2
after fork: Hello my world 3
parent process: Hello my world 2
after fork: Hello my world 3
-------------------------------------------------------
child, parent가 offset공유하는데, fopen결과가 중복되어 출력이 되는 이유가뭔가요??
-
이룩
감사합니다^^
-
민아
열린 파일을 공유할 뿐이지 오프셋을 공유하는 것은 아님니다. 즉, 현재 프로세스 이미지를 복사하여 \새로운\ 프로세스를 만드는 것입니다. 따라서 fork()이후에는 각각의 프로세스들이 독립적으로 실행되게 되는 것입니다.