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


Автор: Viroman 24.9.2010, 17:44
Дорогие форумчане, есть кусок кода, который форчит процессы и соотвественно очень хочется переделать, поскольку программа и через cygwin компилится и запускается, а этот форк на винде вообще туши свет. Поэтому я очень надеюсь, что с вашей помощью получится переделать по человечески.

Код


   listen_socket = start_listen_socket(&addr_listen);

   if (fork() > 0) exit(0); /* Detach */

   write_pid_file(pid_file);

   /* New session -- become group leader */
   res = setsid();
   CHECK_RES_DIE(res, "setsid: already process leader");

   /* Main server loop: accept connections, find what they are, fork shovelers */
   while (1)
   {
      in_socket = accept(listen_socket, 0, 0);
      if (verbose) fprintf(stderr, "accepted fd %d\n", in_socket);

      if (!fork())
      {
         close(listen_socket);
         start_shoveler(in_socket);
         exit(0);

      }
      close(in_socket);
   }


Не буду указывать код самих функций, в общем мне просто необходимо заменить fork() на мультитридную весию. И огромная просьба, я очень ещё далёк от C и самого программирования на линуксе, поэтому если поможете изменить сам код, будет прекрасно, ну если нет, то хотя бы дайте пример, как до было с форк() и после мультитреадингом, чтобы я мог по указанному примеру спрограммировать.
Спасибо вам огромное заранее.

Автор: boostcoder 24.9.2010, 18:22
назначение fork() известно?
о какой многопоточности идет речь? это разные способы.

Автор: Viroman 24.9.2010, 19:05
Уважаемый бутскодер, 
может если вам я дам весь код, вы глянете и резонно ответите, можно ли так перепрограммировать, чтобы не открывались новые процессы запущенной программы. Всё, что нужно, переделать так, чтобы сокетные соединения слушались как и прежде, но так, чтобы каждый новый сокет обрабатывался в своём новом потоке не создавая новую копию процесса как отдельную программу. Чтобы не заниматься вопросами моих знаний, ибо это будет для вас абсолютно не важно, знаю ли я что нибудь по факту или нет, просто по человечески помогите, если умеете. ;)

Автор: boostcoder 24.9.2010, 19:07
Цитата(Viroman @  24.9.2010,  19:05 Найти цитируемый пост)
нужно, переделать так, чтобы сокетные соединения слушались как и прежде, но так, чтобы каждый новый сокет обрабатывался в своём новом потоке

вот. теперь понял.
кода много?

Автор: Viroman 24.9.2010, 19:29
Код в личке, его не так много, если не сказать, что мало, благодарю заранее.

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