![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
versus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 8.3.2005 Где: Переславль-Залесс кий Репутация: 2 Всего: 3 |
Рассмотрим программу:
#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 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: нет Всего: 37 |
Честно говоря под nix никогда не писал, но так понимаю fork() создает копию текущего потока и продолжается выполнение двух потоков. Во втором случае буффер вывода не очищается до fork() - вот и Before
|
|||
|
||||
versus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 8.3.2005 Где: Переславль-Залесс кий Репутация: 2 Всего: 3 |
Похоже на правду, спасибо
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |