mkfifo

MKFIFO(3)                Руководство программиста Linux                MKFIFO(3)



ИМЯ
       mkfifo, mkfifoat - создают специальный файл очереди FIFO (именованный
       канал)

ОБЗОР
       #include <sys/types.h>
       #include <sys/stat.h>

       int mkfifo(const char *pathname, mode_t mode);

       #include <fcntl.h>           /* определения констант AT_* */
       #include <sys/stat.h>

       int mkfifoat(int dirfd, const char *pathname, mode_t mode);

   Требования макроса тестирования свойств для glibc (смотрите
   feature_test_macros(7)):

       mkfifoat():
           Начиная с glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           До glibc 2.10:
               _ATFILE_SOURCE

ОПИСАНИЕ
       Функция mkfifo() создаёт специальный файл FIFO с именем pathname и
       правами доступа mode. Как обычно, в правах учитывается значение umask
       процесса: права на создаваемый файл вычисляются как (mode & ~umask).

       Специальный файл FIFO подобен каналу, за исключением того, что он
       создаётся другим способом. Вызов mkfifo() вместо безымянного канала
       взаимодействия создаёт специальный файл FIFO, расположенный в файловой
       системе.

       После создания специального файла  FIFO, любой процесс может открывать
       его для чтения или записи, как если бы он открывал обычный файл. Однако
       прежде чем вы сможете что-либо сделать, его необходимо открыть с обоих
       концов, притом одновременно. Открытие FIFO для чтения обычно блокируется,
       пока какой-нибудь другой процесс не откроет его для записи, и наоборот.
       Описание работы со специальными файлами FIFO в неблокирующем режиме
       смотрите в fifo(7).

   mkfifoat()
       Функция mkfifoat() работает также как как mkfifo(), за исключением
       случаев, описанных здесь.

       Если в pathname задан относительный путь, то он считается относительно
       каталога, на который ссылается файловый дескриптор dirfd (а не
       относительно текущего рабочего каталога вызывающего процесса, как это
       делается в mkfifo(3)).

       Если в pathname задан относительный путь и dirfd равно специальному
       значению AT_FDCWD, то pathname рассматривается относительно текущего
       рабочего каталога вызывающего процесса (как mkfifo(3)).

       Если в pathname задан абсолютный путь, то dirfd игнорируется.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
       При успешном выполнении вызовы mkfifo() и mkfifoat() возвращают 0. В
       случае ошибки возвращают -1, а errno устанавливается в соответствующее
       значение.

ОШИБКИ
       EACCES Один из каталогов содержащихся в pathname не позволяет выполнить
              поиск, так как правами запрещено исполнение.

       EDQUOT Исчерпана пользовательская квота на дисковые блоки или иноды
              файловой системы.

       EEXIST pathname уже существует. В этом случае pathname может быть
              символьной ссылкой, повисшей или нет.

       ENAMETOOLONG
              Если длина полного имени файла (включая путь)  pathname больше чем
              PATH_MAX или длина имени файла больше чем NAME_MAX. В общем случае
              в системах, соответствующих стандарту GNU, отсутствует ограничение
              на длину полного имени файла, однако некоторые файловые системы
              могут устанавливать ограничение на длину отдельного компонента.

       ENOENT Один из каталогов в pathname не существует или является повисшей
              символьной ссылкой.

       ENOSPC В каталоге или файловой системе закончились места для новых
              файлов.

       ENOTDIR
              Компонент пути, использованный как каталог в pathname, в
              действительности таковым не является.

       EROFS  pathname указывает на файловую систему, доступную только для
              чтения.

       Следующие дополнительные ошибки могут быть характерны для  mkfifoat():

       EBADF  dirfd не является правильным файловым дескриптором.

       ENOTDIR
              pathname является относительным путем, а dirfd является файловым
              дескриптором, указывающим на файл, отличный от каталога.

ВЕРСИИ
       Функция mkfifoat() была добавлена в glibc 2.4. Она реализована с помощью
       системного вызова mknodat(2), доступного в ядре Linux начиная с версии
       2.6.16.

АТРИБУТЫ
       Описание терминов данного раздела смотрите в attributes(7).

       ┌─────────────────────┬──────────────────────┬──────────┐
       │Интерфейс            Атрибут              Значение │
       ├─────────────────────┼──────────────────────┼──────────┤
       │mkfifo(), mkfifoat() │ Безвредность в нитях │ MT-Safe  │
       └─────────────────────┴──────────────────────┴──────────┘
СООТВЕТСТВИЕ СТАНДАРТАМ
       mkfifo(): POSIX.1-2001, POSIX.1-2008.

       mkfifoat(): POSIX.1-2008.

СМОТРИТЕ ТАКЖЕ
       mkfifo(1), close(2), open(2), read(2), stat(2), umask(2), write(2),
       fifo(7)



GNU                                2017-09-15                          MKFIFO(3)