ВУЗ:
Составители:
252
Именованные и неименованные каналы (пайпы)
Операционные системы семейства Unix всегда поддерживают два
типа однонаправленных каналов:
неименованные каналы;
именованные каналы FIFO.
Неименованные каналы – это самая первая форма IPC в Unix (1973),
главным недостатком которых является отсутствие имени, вследствие че-
го они могут использоваться для взаимодействия только родственными
процессами. В Unix System третьей редакции (1982) были добавлены ка-
налы FIFO, которые называются именованными каналами. Аббревиатура
FIFO расшифровывается как «first in, first out» – «первым вошел, первым
вышел», то есть эти каналы работают как очереди. Именованные каналы
в Unix функционируют подобно неименованным – позволяют передавать
данные только в одну сторону. Однако в отличие от программных кана-
лов каждому каналу FIFO сопоставляется полное имя в файловой систе-
ме, что позволяет двум неродственным процессам обратиться к одному и
тому же FIFO. Доступ и к именованным каналам, и к неименованным ор-
ганизуется с помощью обычных функций read и write.
FIFO создается вызовом mkfifo:
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
/* возвращает 0 при успешном выполнении, -1 при ошибке */
Здесь pathname – обычное для Unix полное имя файла, которое и
будет именем FIFO.
Аргумент mode указывает битовую маску разрешений доступа к
файлу (табл. 4.2), аналогично второму аргументу команды open.
Функция mkfifo действует как open, вызванная с аргументом
mode = O_CREAT | O_EXCL. Это означает, что создается новый канал
FIFO или возвращается ошибка EEXIST в случае, если канал с заданным
полным именем уже существует. Если не требуется создавать новый ка-
нал, вызывайте open вместо mkfifо. Для открытия существующего канала
или создания нового, в том случае, если его еще не существует, вызови-
те mkfifo, проверьте, не возвращена ли ошибка EEXIST, и если такое
случится, вызовите функцию open.
Команда mkfifo также создает канал FIFO. Ею можно пользоваться в
сценариях интерпретатора или из командной строки.
Живучесть каналов определяется живучестью процессов, т. е. канал
будет существовать до тех пор, пока он не будет принудительно закрыт
либо не останется ни одного процесса работающего с каналом.
Страницы
- « первая
- ‹ предыдущая
- …
- 250
- 251
- 252
- 253
- 254
- …
- следующая ›
- последняя »
