Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на экзаменационные вопросы.doc
Скачиваний:
45
Добавлен:
01.05.2014
Размер:
888.32 Кб
Скачать

33. Именованный программный канал и взаимодействие процессов в unix. Пример

Для создания именованных программных каналов (или получения доступа к уже существующим каналам) используется обычный системный вызов open. Основным отличием от случая открытия обычного файла является то, что если именованный программный канал открывается на запись, и ни один процесс не открыл тот же программный канал для чтения, то обращающийся процесс блокируется (усыпляется) до тех пор, пока некоторый процесс не откроет данный программный канал для чтения (аналогично обрабатывается открытие для чтения).

Именованному программному каналу обязательно соответствует элемент некоторого каталога и даже собственный i-узел. Другими словами, именованный программный канал выглядит как обычный файл, но не содержащий никаких данных до тех пор, пока некоторый процесс не выполнит в него запись. После того, как некоторый другой процесс прочитает записанные в канал байты, этот файл снова становится пустым. В отличие от неименованных программных каналов, именованные программные каналы могут использоваться для связи любых процессов (т.е. не обязательно процессов, входящих в одну иерархию родства).

Насчет примера спросить Красюка…

На консультации 51-ой он сказал писать про создание фифо: mknod name_fifo.

Или

Для создания именованных программныхканалов (или получения доступа к уже существующим каналам) используется обычный системный вызовopen. Основным отличием от случая открытия обычного файла является то, что если именованный программный канал открывается на запись, и ни один процесс не открыл тот же программный канал для чтения, то обращающийся процесс блокируется (усыпляется) до тех пор, пока некоторый процесс не откроет данный программный канал для чтения (аналогично обрабатывается открытие для чтения).

Именованному программному каналу обязательно соответствует элемент некоторого каталога и даже собственный i-узел. Другими словами, именованный программный канал выглядит как обычный файл, но не содержащий никаких данных до тех пор, пока некоторый процесс не выполнит в него запись. После того, как некоторый другой процесс прочитает записанные в канал байты, этот файл снова становится пустым. В отличие от неименованных программных каналов, именованные программные каналы могут использоваться для связи любых процессов (т.е. не обязательно процессов, входящих в одну иерархию родства).

В длинном листинге признаком именованного канала является символ pв первой позиции первого столбца:

[kravchuk@arturo 15:20:46 /tmp]$ find / -type p -print 2>/dev/null

/var/spool/lp/fifos/FIFO

/etc/cron.d/FIFO

/etc/saf/zsmon/_pmpipe

/etc/saf/_sacpipe

/etc/saf/_cmdpipe

/etc/initpipe

/etc/utmppipe

^C

[kravchuk@arturo 15:22:29 /tmp]$ ls -l /etc/cron.d/FIFO

prw------- 1 root root 0 Фев 23 15:41 /etc/cron.d/FIFO

Именованные каналы создаются командой mknod:

mknod имя p

Например:

[kravchuk@arturo 15:27:17 /tmp]$ mknod p1 p

[kravchuk@arturo 15:27:18 /tmp]$ ls -l p* >p1 & cat p1

[2] 22380

prw-r--r-- 1 kravchuk 50 0 Мар 26 15:17 p1

-rw-rw-r-- 1 root sys 8296 Фев 23 15:39 ps_data

[2]- Done ls -l p* >p1

[kravchuk@arturo 15:27:22 /tmp]$