в BSD не реализован) сходен
Метод
FIFO ( в BSD не реализован) сходен с канальным обменом, так как также организует лишь однонаправленный обмен. Такие каналы имеют имена, что позволяет их применять при обмене между независимыми процессами.
FIFO – это отдельный тип файла в файловой системе UNIX. Для формирования FIFO используется системный вызов
mknod.
int mknod(char *pathname, int mode, int dev);
где
pathname – имя файла (
FIFO),
mode – флаги владения и прав доступа,
dev – при создании
FIFO игнорируется.
Допускается создание
FIFO и из командной строки:
mknod name p.
FIFO также как и обычные канала работают с соблюдением следующих правил.
- Если из канала берется меньше байтов, чем там содержится, остальные остаются там для последующего чтения.
- При попытке прочесть больше байт, чем имеется в канале, читающий процесс должен соответствующим образом обработать возникшую ситуацию.
- Если в канале ничего нет и ни один процесс не открыл его на запись, при чтении будет получено нуль байтов. Если один или более процессов открыло канал на запись, вызов read будет заблокирован до появления данных.
- В случае записи в канал несколькими процессами, эти данные не перемешиваются.
- При попытке записать большее число байтов, чем это позволено каналом или FIFO, вызов write блокируется до освобождения нужного места. Если процесс предпринимает попытку записи в канал, не открытый ни одним из процессов для чтения, процессу посылается сигнал SIGPIPE, а вызов write присылает 0 с кодом ошибки errno=EPIPE.
Сообщения
Очереди сообщения являются составной частью UNIX System V. Процесс, заносящий сообщение в очередь, может не ожидать чтения этого сообщения каким-либо другим процессом. Сообщения имеют следующие атрибуты:
- Тип сообщения
- Длина данных в байтах
- Данные (если длина ненулевая)
Очередь сообщений имеет вид списка в адресном пространстве ядра. Для каждой очереди ядро формирует заголовок(msqid_ds), где размещаются данные о правах доступа к очереди (msg_perm), о текущем состоянии очереди (msg_cbytes – число байтов msg_qnum – число сообщений в очереди), а также указатели на первое и последнее сообщение. Создание новой очереди сообщений осуществляется посредством системного вызова msgget:
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий