2016-08-06 5 views
0

여기 내 C 프로그램입니다 문 :이해 표준 출력 출력

int main() { 
    fork(); 
    printf("one\n"); 
    fork(); 
    printf("two\n"); 
} 

출력은 다음과 같습니다

,
one 
one 
two 
two 
two 
two 

또는 때때로는 (순서는 변경할 수 있습니다) :

one 
two 
one 
two 
two 
two 

왜 두 번째에 출력 8 첫 번째 프로그램의 단어와 6입니까?

+0

표준 출력은 라인 버퍼링된다. 어쨌든 프로세스 실행 순서는 임의적이므로 임의 순서로 발생할 수 있으므로 중요하지 않습니다. –

+0

이것은 숙제 문제와 매우 흡사합니다. 어떤 설명을 고려 했습니까? – Peter

+0

이것은 숙제 문제가 아닙니다. 여기서 일어난다면 버퍼 덮어 쓰기를 이해하고 싶습니다. –

답변

1

2 개의 프로세스가 첫 번째 printf()을 실행 한 다음 4 개의 프로세스가 두 번째 printf()을 실행하므로 6 개의 출력이 있어야합니다.

첫 번째 코드에서는 버퍼에있는 내용이 플러시되기 전에 fork()이 실행 된 것으로 보이고 버퍼 내용이 복제 된 다음 초과 출력이 나타납니다.

번째 코드에서는 \n 그것이 버퍼를 플러시했다 때문에 과량 출력은 나타나지 않았다 보인다.