GNU
2017-09-15
Aliases: mkfifoat(3), mkfifoat(3), mkfifoat(3), mkfifoat(3), mkfifoat(3), mkfifoat(3)
man-pages-ru
Russian man pages from the Linux Documentation Project
manpages-dev
Manual pages about using GNU/Linux for development
man-pages
Linux kernel and C library user-space interface documentation
ИМЯ
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.