У меня такой код:
for(i=1; i<=2; i++)
{
fork();
printf("x ");
}
Я подсчитал, что x нужно распечатать 6 раз: дважды в первой итерации и 4 раза во второй.
Вместо этого X печатается 8 раз. Почему?
1 ответ
Из-за буферизации. Обычно stdout
буферизируется по строке, поэтому
printf("x ");
Не сразу записывает "x "
в терминал, а в выходной буфер. Это копируется, когда процесс fork()
s, поэтому каждый из четырех процессов после второй итерации имеет два "x "
в выходном буфере [один из родительского / перед разветвлением в первой итерации, один из вторая итерация] при выходе и всего распечатываются восемь x
.
Очистите буфер сразу после printf("x ");
, и будет напечатано только шесть.
fflush(stdout);
- это самый простой способ последовать совету Даниэля.
Похожие вопросы
Связанные вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.