Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Чудеса с fork-ом и системой ввода-вывода


Автор: versus 22.3.2007, 17:55
Рассмотрим программу:

#include <iostream>

int main(int argc, char **argv)
{
    std::cout << "Before fork" << std::endl;

    fork();

    std::cout << "After fork" << std::endl;

    return 0;
}

Что напечатает программа? 
Разумеется:
Before fork
After fork
After fork

Слегка изменим программу:

#include <iostream>

int main(int argc, char **argv)
{
    std::cout << "Before fork";

    fork();

    std::cout << "After fork";

    return 0;
}

Что теперь напечатает программа? Меня результат удивил:
Before forkAfter forkBefore forkAfter fork

Кто-нибудь знает откуда взялся второй "Before fork"?

Автор: Sartorius 22.3.2007, 18:42
 Честно говоря под nix никогда не писал, но так понимаю fork() создает копию текущего потока и продолжается выполнение двух потоков.  Во втором случае буффер вывода не очищается до fork() - вот и Before

Автор: versus 22.3.2007, 19:02
Похоже на правду, спасибо smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)