Нашей целью является не полное описание системного вызова mknod, а только описание его использования для создания FIFO. Поэтому мы будем рассматривать не все возможные варианты задания параметров, а только те из них, которые соответствуют этой специфической деятельности.
Параметр dev является несущественным в нашей ситуации, и мы будем всегда задавать его равным 0.
Параметр path является указателем на строку, содержащую полное или относительное имя файла, который будет являться меткой FIFO на диске. Для успешного создания FIFO файла с таким именем перед вызовом существовать не должно.
Параметр mode устанавливает атрибуты прав доступа различных категорий пользователей к FIFO. Этот параметр задается как результат побитовой операции «или» значения S_IFIFO, указывающего, что системный вызов должен создать FIFO, и некоторой суммы следующих восьмеричных значений:
0400 - разрешено чтение для пользователя, создавшего FIFO;
0200 - разрешена запись для пользователя, создавшего FIFO;
0040 - разрешено чтение для группы пользователя, создавшего FIFO;
|
|
0020 - разрешена запись для группы пользователя, создавшего FIFO;
0004 - разрешено чтение для всех остальных пользователей;
0002 - разрешена запись для всех остальных пользователей.
При создании FIFO реально устанавливаемые права доступа получаются из стандартной комбинации параметра mode и маски создания файлов текущего процесса mask, а именно -они равны (0777 & mode) & ~umask.
Возвращаемые значения
При успешном создании FIFO системный вызов возвращает значение 0, при неуспешном - отрицательное значение.
Функция mkfifo
Прототип функции:
#include <sys/stat.h>
#include <unistd.h>
int mkfifo(char *path, int mode);