2014-09-27 7 views
0

Я застрял в понимании вывода этой программы.fork() - Можете ли вы объяснить этот вывод

#include<stdio.h> 
#include<unistd.h> 
void fork1() 
{ 
printf("\n %d L0", getpid()); 
fork(); 
printf("\n %d L1", getpid()); 
fork(); 
printf("\n %d Bye", getpid()); 
} 

int main() 
{ 
fork1(); 
return 0; 
} 

Выход

2625 L0

2625 L0

2625 L1

2625 Bye 2626 L1

2626 Bye 2625 L1

2627 Bye 2626 L1

2628 Bye

+0

Два вопроса: 1) «printf()» буферизуется. Символы не отображаются сразу; они отображаются только тогда, когда ОС решает его выполнить. 2) Кроме того, ОС может (и, вероятно, будет) переключаться между различными процессами в * середине * ввода-вывода. Эти два вопроса должны объяснить «перемежение», которое вы видите на выходе. – FoggyDay

ответ

0

Есть три ключевых момента:

  1. вилка() будет копировать буфер родительском-процесса
  2. Printf работает над буфером
  3. printf будет промывать буфер, когда он поставляется с «\ n», EOF и т. Д.

Итак, если вы измените printf на printf («XXXX \ n»), все станет нормальным