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


         

Некоторые сигналы можно заблокировать, отложить


Некоторые сигналы можно заблокировать, отложить их обработку, или проигнорировать, для других (например, 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.


Содержание  Назад  Вперед