Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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 |
Похоже на правду, спасибо ![]() |