2016-08-06 4 views
0

Вот моя C программа:Понимание вывода STDOUT при использовании с вилкой()

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

Выход:

one two one two one two one two 

Однако, если изменить код и добавить \n к печати заявление:

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

stdout - строка буферизирована. Но это не имеет значения, так как порядок выполнения процесса произволен, так что это может произойти в любом порядке. –

+0

Это очень похоже на домашнюю проблему. Какое объяснение вы считали? – Peter

+0

Это не проблема домашних заданий :) Я хочу понять, что перезапись буфера происходит здесь. –

ответ

1

2 процесса выполняют первый printf(), а затем 4 процесса выполняют второй printf(), поэтому должно быть 6 выходных данных.

В первом коде, кажется, fork() выполнено до того, что буфера сброшено, затем содержимое буфера дублируется, а затем появляется избыточный выход.

Во втором коде, кажется, \n умысло буфера, и поэтому избыточный выход не появился.

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