- bullseye-backports 4.18.1-1~bpo11+1
- testing 4.18.1-1
- unstable 4.18.1-1
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);
mkfifoat():
- Начиная с glibc 2.10:
- _POSIX_C_SOURCE >= 200809L
- До glibc 2.10:
- _ATFILE_SOURCE
ОПИСАНИЕ¶
mkfifo() makes a FIFO special file with name pathname. mode specifies the FIFO's permissions. It is modified by the process's umask in the usual way: the permissions of the created file are (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():
ВЕРСИИ¶
Функция 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)
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан aereiae <aereiae@gmail.com>, Alexey <a.chepugov@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, ITriskTI <ITriskTI@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Малянов Евгений Викторович <maljanow@outlook.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
13 августа 2020 г. | GNU |