Интегрированные сети ISDN


Процессы - часть 6


Для независимых процессов такой метод обмена недоступен. Канальный обмен может быть запущен и с консоли. Например:

cat file.txt | wc

Здесь символ | олицетворяет создание канала между выводом из файла file.txt и программой wc, подсчитывающей число символов в словах. Процессы эти не являются независимыми, так как оба порождены процессом shell.

Метод 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.




Начало  Назад  Вперед



Книжный магазин