Вход/Регистрация
UNIX: взаимодействие процессов
вернуться

Стивенс Уильям Ричард

Шрифт:

Поток может быть завершен двумя другими способами:

■ начальная функция потока (третий аргумент pthread_create) может вызвать return. Поскольку эта функция должна объявляться как возвращающая указатель на тип void, это возвращаемое значение становится статусом завершения потока;

■ функция main процесса может завершить работу или один из потоков может вызвать exit или _exit. При этом процесс завершает работу немедленно, вместе со всеми своими потоками.

ПРИЛОЖЕНИЕ В

Вспомогательные исходные коды

В.1. Заголовочный файл unpipc.h

Почти все программы книги подключают заголовочный файл unpipc.h, приведенный в листинге В.1. [1] Он подключает все стандартные системные заголовки, нужные большинству пpoгрaмм для работы с сетью, вместе с некоторыми общими системными заголовками. Он также определяет константы типа MAXLINE и прототипы функций ANSI С для функций, определенных в тексте (типа px_ipc_name), и для всех используемых в книге оберток. Мы не приводим эти прототипы.

1

Все исходные тексты, опубликованные в этой книге, вы можете найти по адресу http://www.piter.com/download.

Листинг В.1. Заголовочный файл unpipc.h

//lib/unpipc.h

1 /* Наш заголовочный файл. */

2 #ifndef __unpipc_h

3 #define __unpipc_h

4 #include "../config.h" /* параметры конфигурации ОС */

5 /* "../config.h" создается сценарием configure */

6 /* изменяя список директив #include, нужно изменять файлы

7 ../aclocal.m4 и ../configure.in. чтобы работал сценарий configure */

8 #include <sys/types.h> /* базовые типы данных */

9 #include <sys/time.h> /* структура timeval{} для select */

10 #include <time.h> /* timespec{} для pselect */

11 #include <errno.h>

12 #include <fcntl.h> /* отключение блокировки */

13 #include <limits.h> /* PIPE_BUF */

14 #include <signal.h>

15 #include <stdio.h>

16 #include <stdlib.h>

17 #include <string.h>

18 #include <sys/stat.h> /* константы режима доступа к файлу S_xxx */

19 #include <unistd.h>

20 #include <sys/wait.h>

21 #ifdef HAVE_MQUEUE_H

22 #include <mqueue.h> /* очереди сообщений Posix */

23 #endif

24 #ifdef HAVE_SEMAPHORE_H

25 #include <semaphore.h> /* семафоры Posix */

26 #ifndef SEM_FAILED

27 #define SEM_FAILED ((sem_t *)(-1))

28 #endif

29 #endif

30 #ifdef HAVE_SYS_MMAN_H

31 #include <sys/mman.h> /* разделяемая память Posix */

32 #endif

33 #ifndef MAP_FAILED

34 #define MAP_FAILED ((void *)(-1))

35 #endif

36 #ifdef HAVE_SYS_IPC_H

37 #include <sys/ipc.h> /* System V IPC */

38 #endif

39 #ifdef HAVE_SYS_MSG_H

40 #include <sys/msg.h> /* очереди сообщений System V */

41 #endif

42 #ifdef HAVE_SYS_SEM_H

43 #ifdef __bsdi__

44 #undef HAVE_SYS_SEM_H /* тонкий момент: прототип semctl в BSDI's содержит ошибки*/

45 #else

46 #include <sys/sem.h> /* семафоры System V */

47 #endif

48 #ifndef HAVE_SEMUN_UNION /* $$.It semun$$ */

49 union semun { /* определение объединения для semctl */

50 int val;

51 struct semid_ds *buf;

52 unsigned short *array;

  • Читать дальше
  • 1
  • ...
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: