LINUX.ORG.RU

fork()


0

0

есть вот такой текст

{ printf("Hello");

if(fork()==0) printf("world");

exit(0); }

На экран выводится Hello world Hello Откуда берется второй раз Hello? Когда пишу printf("Hello \n"); Работает как надо.


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

это всего лишь мое предположение, не больше :))

csa
()

Я тоже так думал, поэтому ставил printf("hello\a"); Пищало 2 раза. Так, что буфер тут не причем.

ZORG
() автор топика

Postav fflush(stdout)
posle pervogo printf i vse zarabotaet.

master
()
Ответ на: комментарий от ZORG

Ну и как по твоему, почему он 2 раза пищал? :))) как только буфер на экран вываливает и встречает \а - так и пищит

csa
()

Дык, буферизация и есть! printf обращаестя к стандартному вводу-выводу,
который файловый и буферизованный, а не к потоку! Буферы же форкаются
вместе с содержимым. Все будет как ты хочешь, если прога будет такой:

main () { 
	int pid;

	write(0,"Hello", 5);
	pid = fork();
	if(pid==0) { 
		write(0," world\n", 7);
	} else {
		wait(pid);
	}
exit(0);
}

Когда используешь printf, ставь в конце "\n", тогда тоже будет все нормально...

speer
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.