Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Далее дочерний процесс может применить
execododРодительский процесс начинает с закрытия конца чтения канала,
file_pipes[0]odreadodododНа рис. 13.3 показан результат вызова
pipefork
Рис. 13.3

Рис. 13.4

Рис. 13.5
Именованные каналы: FIFO
До сих пор вы могли передавать данные только между связанными программами, т.е. программами, которые стартовали из общего процесса-предка. Часто это очень неудобно, хотелось бы, чтобы и у несвязанных процессов была возможность обмениваться данными.
Вы можете сделать это с помощью каналов FIFO, часто называемых именованными каналами. Именованный канал — это файл специального типа (помните, что в ОС Linux все, что угодно, — файл!), существующий в виде имени в файловой системе, но ведущий себя как неименованные каналы, которые вы уже встречали.
Вы можете создавать именованные каналы из командной строки и внутри программы. С давних времен программой создания их в командной строке была команда
mknod$ <b>mknod <i>имя_файла</i> p</b>Однако команды
mknod$ <b>mkfifo <i>имя_файла</i></b>У некоторых более старых версий UNIX была только команда
mknodmknodmknodmkfifoВнутри программы можете применять два разных вызова:
<b>#include <sys/types.h></b><b>#include <sys/stat.h></b><b>int mkfifo(const char *filename, mode_t mode);</b><b>int mknod(const char* filename, mode_t mode | S_IFIFO, (dev_t)0);</b>Помимо команды
mknodmknoddev_t S_IFIFOmkfifoИтак, выполните упражнение 13.9.
Далее приведен исходный текст примера fifo1.c.
#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>int main() { int res = mkfifo("/tmp/my_fifo", 0777); if (res == 0) printf ("FIFO createdn"); exit(EXIT_SUCCESS);}Вы можете создать канал и заглянуть в него:
$ <b>./fifo1</b>FIFO created$ <b>ls -lF /tmp/my_fifo</b>prwxr-xr-x 1 rick users 0 2007-06-16 17:18 /tmp/my_fifo|Обратите внимание на то, что первый символ вывода —
р|-FlsКак это работает
Программа применяет функцию
mkfifo0777umask022755umask0002Удалить FIFO можно как традиционный файл с помощью команды
rmunlinkДоступ к FIFO
У именованных каналов есть одно очень полезное свойство: поскольку они появляются в файловой системе, их можно применять в командах на месте обычного имени файла. Прежде чем вы продолжите программирование с использованием созданного вами файла FIFO, давайте исследуем поведение такого файла с помощью обычных команд для работы с файлом (упражнение 13.10).
