UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
<i>Возвращает: 0 в случае успешного выполнения, положительное значение Exxx в случае ошибки</i>Эта функция обычно вызывается потоком при необходимости изменить собственный статус в следующем формате:
pthread_detach(pthread_self());Функция pthread_exit
Одним из способов завершения потока является вызов функции
pthread_exit#include <pthread.h>void pthread_exit(void *<i>status</i>);<i>Ничего не возвращает вызвавшему потоку</i>Если поток не является отсоединенным, идентификатор потока и статус завершения сохраняются до того момента, пока какой-либо другой поток данного процесса не вызовет функцию
pthread_joinУказатель
statusСуществуют и другие способы завершения потока.
■ Функция, которая была вызвана потоком (третий аргумент функции
pthread_createvoid■ Если функция
mainexit26.3. Использование потоков в функции str_cli
В качестве первого примера использования потоков мы перепишем нашу функцию
str_cliforkselectНа рис. 26.1 показана структура очередной версии функции str_cli, на этот раз использующей потоки, а в листинге 26.1 [1] представлен код этой функции.

Рис. 26.1. Измененная функция str_cli, использующая потоки
Листинг 26.1. Функция str_cli, использующая потоки
//threads/strclithread.c 1 #include "unpthread.h" 2 void *copyto(void*); 3 static int sockfd; /* глобальная переменная, доступная обоим потокам */ 4 static FILE *fp; 5 void 6 str_cli(FILE *fp_arg, int sockfd_arg) 7 { 8 char recvline[MAXLINE]; 9 pthread_t tid;10 sockfd = sockfd_arg; /* копирование аргументов во внешние переменные */11 fp = fp_arg;12 Pthread_create(&tid, NULL, copyto, NULL);13 while (Readline(sockfd, recvline. MAXLINE) > 0)14 Fputs(recvline, stdout);15 }16 void*17 copyto(void *arg)18 {19 char sendline[MAXLINE];20 while (Fgets(sendline, MAXLINE, fp) != NULL)21 Writen(sockfd, sendline, strlen(sendline));22 Shutdown(sockfd, SHUT_WR); /* признак конца файла в стандартном потоке ввода, отправка сегмента FIN */23 return (NULL);24 /* завершение потока происходит, когда в стандартном потоке ввода встречается признак конца файла */25 }1unpthread.hunp.h<pthread.h>pthread_XXXPthread_10-11str_clifpFILEsockfd12tidcopyto13-14readlinefputs15str_cliexitexit
