Телекоммуникационные технологии


Краткий справочник по командам UNIX - часть 13


Некоторые сигналы можно заблокировать, отложить их обработку, или проигнорировать, для других (например, SIGKILL и SIGSTOP) это невозможно.

Взаимное влияние процессов в UNIX минимизировано (многозадачность!), но система была бы неэффективной, если бы она не позволяла процессам обмениваться данными и сигналами (IPC - Inter Process Communications). Для реализации этой задачи в UNIX предусмотрены:

  • каналы
  • сигналы
  • FIFO (First-In-First-Out - именованные каналы)
  • очереди сообщений
  • семафоры
  • совместно используемые области памяти
  • сокеты

Для создания канала используется системный вызов pipe int pipe(int *filedes); который возвращает два дескриптора файла filedes[0] - для записи в канал и filedes[1] для чтения из канала. Когда один процесс записывает данные в filedes[0], другой получает их из filedes[1]. Здесь уместен вопрос, как этот другой процесс узнает дескриптор filedes[1]?

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

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.




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



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