2014-09-25 2 views
-2

테스트 나는 이상한 행동 예를 들어C - 포크와 printf와 행동

에게 코드 발견의 printf와 함께 포크 기능 : 동안 아무것도 출력하지 않습니다

int main(){ 
    if(fork()==0){ 
      printf("TestString"); 
    } 
} 

int main(){ 
    if(fork()==0) { 
    printf("TestString\n"); 
    } 
} 

은 TestString을 올바르게 인쇄합니다. 왜 새로운 줄을 인쇄하면 그 행동이 바뀌는가? 나는 그것이 fflush()로 무언가를 할지도 모른다라고 생각한다. 그러나 나는 확실하지 않다. 내가 읽을 수있는 설명이나 링크를 얻을 수 있을까요? 미리 답변 해 주셔서 감사합니다.

EDITED : 내가 찾고있는 설명은 실제로 플러시되는 것이고 플러시와 같은 이유입니다.

+0

네,'fflush (stdout)'을 사용하거나 당신이했던 것과 똑같은 줄 바꿈을 사용해야합니다. – user1336087

+0

printf가 버퍼링되고, '\ n'문자가 나왔을 때 버퍼 내용이 표시됩니다. Flush는 printf와 관련된 버퍼의 내용을 지우는 것을 의미합니다. 이 코드를 테스트하고 두 경우 모두 "TestString"을 인쇄합니다. –

답변

0

Linux (적어도)에서 stdout입니다. 줄 바꿈입니다. 즉, 쓸 내용이 실제로 '\n'에 도달 할 때까지는 화면에 나타나지 않습니다. 이 동작이 마음에 들지 않으면 버퍼링 정책을 setbuf()으로 변경할 수 있지만 프로그램 시작과 동시에 (실제로 스트림에 쓰기 전에) 수행해야합니다. 플러시 할 때마다 fflush()으로 전화하십시오. 버퍼 내용.

버퍼는 프로그램이 종료되고 열린 스트림이 자동으로 닫히면 어쨌든 플러시됩니다.