URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 315
[ Назад ]

Исходное сообщение
"Hello world ?????"

Отправлено zorg , 02-Дек-01 23:34 
есть програмка
{
   printf ("Hello");
if(fork()==0)
   printf("world");
exit(0);
}

На экране получаю Hello world Hello. Откуда взялся второй Hello? Если пишу printf("Hello\n"); Получаю Hello world.


Содержание

Сообщения в этом обсуждении
"RE: Hello world ?????"
Отправлено Shurik , 03-Дек-01 16:10 
прикол в том, что printf не сразу выводит на терминал, а сначала сбрасывает в буфер. Соответсвенно child наследует все, включая буфер...

а буфер на терминал скидывается при завершении проги или при достижении симола '\n'

В буфере парента имеем "hello" в буфере чайлда "hello world" .. вот и получается слова hello два раза...

модифицируй немного прогу и увидишь... например так:

{
   printf (" Hello ");
   if(fork()==0){
      printf (" child start ");
      printf(" world ");
   }
   printf (" end ");
}


"RE: Hello world ?????"
Отправлено ZORG , 03-Дек-01 17:52 
SPASIBO!!!