버퍼링 된 IO 스트림의 경우 fork()
에서 이상한 동작이 발생합니다.fork() 및 버퍼링 된 IO 스트림
아래 표시된 샘플 코드에서 읽히는 파일의 크기는 252 바이트입니다. fork()
뒤에는 자식이 성공적으로 줄을 읽고 화면에 인쇄하고 있습니다. 그러나 컨트롤이 부모로 돌아 가면 파일 오프셋이 어떤 이유로 파일 끝으로 설정되고 부모 프로세스가 스트림에서 아무 것도 읽을 수 없습니다. fork()
이 파일 설명자 (시스템 호출 read()
및 write()
을 사용하여 동일한 프로그램을 복제 할 때 잘 동작 함)를 생성하면 상위 프로세스가 스트림에서 다음 행을 읽지 만 여기서는 발생하지 않는 것으로 예상됩니다. 파일 오프셋은 컨트롤이 부모에 도달 할 때 파일의 끝으로 설정됩니다. 누군가가 이것에 대해 밝힐 수 있습니까?
int main(void)
{
char buffer[80];
FILE *file;
pid_t pid;
int status;
/* Open the file: */
file = fopen(FILENAME, "r");
if ((pid = fork()) == 0){
fgets(buffer, sizeof(buffer), file);
printf("%s", buffer);
}
else{
waitpid(pid, &status, 0);
printf("Offset [%d]\n", ftell(file));
fgets(buffer, sizeof(buffer), file);
printf("%s", buffer);
}
}