2014-09-25 3 views
-2

Тестирование функции вилки в сочетании с Printf я нашел странное поведениеC - вилка и поведение 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'. Промывка означает очистку содержимого буфера, связанного с printf. Я тестировал этот код, и он печатает «TestString» в обоих случаях. –

ответ

0

В Linux (не менее), stdout is строка буферирована. Это означает, что все, что вы пишете на нем, на самом деле не появится на экране до тех пор, пока не встретится '\n'. Если вам не нравится это поведение, вы можете изменить политику буферизации с помощью setbuf(), но вам нужно будет сделать это, как только начнется ваша программа (ну, собственно, до любой записи в поток) или вызовите fflush() всякий раз, когда вы хотите сбросить содержимое буфера, как вы сказали.

Помните, что буферы также сбрасываются в любом случае, когда программа заканчивается, и ее открытые потоки автоматически закрываются.

Смежные вопросы