Здравствуйте. Я так и не смог побороть свою проблему с форком, и после запуска небольшой тестовой проги понял, что я вообще не в теме про форк(). Если можете, объясните плз почему программа работает именно так:
$ cat test.c #include <stdio.h>
void do_(void) { int i;
puts("do called"); for(i=0; i<3; i++) { if (!fork()) puts("do child fork()"); else puts("do father fork()"); } }
int main(void) { if (fork()) exit(0); if (freopen("out.txt", "w", stdout) == NULL) { perror("Unable to open log file"); return 9; } puts("main child fork"); puts("reopened"); do_(); }
$ gcc -o test test.c $ ./test $ cat out.txt main child fork reopened do called do child fork() do child fork() do father fork() main child fork reopened do called do father fork() do father fork() do child fork() main child fork reopened do called do child fork() do father fork() do child fork() main child fork reopened do called do child fork() do child fork() do child fork() main child fork reopened do called do father fork() do child fork() do child fork() main child fork reopened do called do father fork() do father fork() do father fork() main child fork reopened do called do child fork() do father fork() do father fork() main child fork reopened do called do father fork() do child fork() do father fork()
Ну если здесь для вас все понятно, то у меня возникли следующие вопросы: 1. почему не совпадает количество сообщений "do child fork()" и "do father fork()" 2. почему сообщения "main child fork" и "reopened" выводятся несколько раз? (т.е. функция main выполянется с начала не один раз). Да, я не очень хороший программер - про форк знаю только то, что она создает копию текущего процесса, но откуда начинается выполнение я не знаю. Насколько корректна данная схема ? Заранее спасибо за помощь.