Книга: UNIX: взаимодействие процессов
4.12. Резюме
4.12. Резюме
Именованные и неименованные каналы представляют собой базовые строительные блоки для множества приложений. Программные каналы (неименованные) обычно используются в интерпретаторе команд, а также внутри программ — часто для передачи информации от дочернего процесса к родительскому. Можно исключить часть кода, относящегося к использованию каналов (piре, fork, close, exec и waitpid), используя функции popen и pclose, которые берут на себя все тонкости и запускают интерпретатор команд.
Каналы FIFO похожи на программные каналы, но создаются вызовом mkfifo и затем могут быть открыты с помощью функции open. При открытии FIFO следует быть аккуратным, поскольку процесс может быть заблокирован, а зависит это от множества условий (см. табл. 4.1).
Используя программные каналы и FIFO, мы создали несколько вариантов приложении типа клиент-сервер: один сервер с несколькими клиентами, последовательный и параллельный серверы. Последовательный сервер единовременно обрабатывает запрос только от одного клиента; такие серверы обычно уязвимы для атак типа «отказ в обслуживании». Параллельный сервер запускает отдельный процесс или поток для обработки запроса нового клиента.
Одним из свойств программных каналов и FIFO является то, что данные по ним передаются в виде потоков байтов, аналогично соединению TCP. Деление этого потока на самостоятельные записи целиком предоставляется приложению. Мы увидим в следующих двух главах, что очереди сообщений автоматически расставляют границы между записями, аналогично тому, как это делается в дейтаграммах UDP.
- 4.1. Введение
- 4.2. Приложение типа клиент-сервер
- 4.3. Программные каналы
- 4.4. Двусторонние каналы
- 4.5. Функции popen и pclose
- 4.6. Именованные каналы (FIFO)
- 4.7. Некоторые свойства именованных и неименованных каналов
- 4.8. Один сервер, несколько клиентов
- 4.9. Последовательные и параллельные серверы
- 4.10. Потоки и сообщения
- 4.11. Ограничения программных каналов и FIFO
- 4.12. Резюме
- Упражнения