Основы операционных систем. Практикум


Понятие FIFO. Использование системного вызова mknod() для создания FIFO. Функция mkfifo() - часть 2


Когда все процессы, работающие с FIFO, закрывают все файловые дескрипторы, ассоциированные с ним, система освобождает ресурсы, выделенные под FIFO. Вся непрочитанная информация теряется. В то же время файл-метка остается на диске и может использоваться для новой реальной организации FIFO в да льнейшем.

Использование системного вызова mknod для создания FIFO

Прототип системного вызова

#include <sys/stat.h> #include <unistd.h> int mknod(char *path, int mode, int dev);

Описание системного вызова

Нашей целью является не полное описание системного вызова mknod, а только описание его использования для создания FIFO. Поэтому мы будем рассматривать не все возможные варианты задания параметров, а только те из них, которые соответствуют этой специфической деятельности.

Параметр dev является несущественным в нашей ситуации, и мы будем всегда задавать его равным 0.

Параметр path является указателем на строку, содержащую полное или относительное имя файла, который будет являться меткой FIFO на диске. Для успешного создания FIFO файла с таким именем перед вызовом существовать не должно.

Параметр mode устанавливает атрибуты прав доступа различных категорий пользователей к FIFO. Этот параметр задается как результат побитовой операции "или" значения S_IFIFO, указывающего, что системный вызов должен создать FIFO, и некоторой суммы следующих восьмеричных значений:

  • 0400 – разрешено чтение для пользователя, создавшего FIFO;
  • 0200 – разрешена запись для пользователя, создавшего FIFO;
  • 0040 – разрешено чтение для группы пользователя, создавшего FIFO;
  • 0020 – разрешена запись для группы пользователя, создавшего FIFO;
  • 0004 – разрешено чтение для всех остальных пользователей;
  • 0002 – разрешена запись для всех остальных пользователей.

При создании FIFO реально устанавливаемые права доступа получаются из стандартной комбинации параметра mode и маски создания файлов текущего процесса umask, а именно – они равны (0777 & mode) & ~umask.

Возвращаемые значения

При успешном создании FIFO системный вызов возвращает значение 0, при неуспешном – отрицательное значение.

<


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