mkfifo, mkfifoat - создают
специальный
файл
очереди FIFO
(именованный
канал)
Standard C library (
libc,
-lc)
#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():
Since glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Before 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()
работает
также как
как
mkfifo(), за
исключением
случаев,
описанных
здесь.
Если в
pathname
задан
относительный
путь, то он
считается
относительно
каталога,
на который
ссылается
файловый
дескриптор
dirfd (а не
относительно
текущего
рабочего
каталога
вызывающего
процесса,
как это
делается в
mkfifo(3)).
Если в
pathname
задан
относительный
путь и
dirfd
равно
специальному
значению
AT_FDCWD, то
pathname
рассматривается
относительно
текущего
рабочего
каталога
вызывающего
процесса
(как
mkfifo(3)).
Если в
pathname
задан
абсолютный
путь, то
dirfd
игнорируется.
See
openat(2) for an explanation of the need for
mkfifoat().
On success
mkfifo() and
mkfifoat() return 0. On error, -1 is
returned and
errno is set to indicate the error.
- EACCES
- Один из
каталогов
содержащихся
в pathname не
позволяет
выполнить
поиск, так
как
правами
запрещено
исполнение.
- EBADF
- (mkfifoat()) pathname is relative but
dirfd is neither AT_FDCWD nor a valid file descriptor.
- EDQUOT
- Исчерпана
пользовательская
квота на
дисковые
блоки или
иноды
файловой
системы.
- EEXIST
-
pathname уже
существует.
В этом
случае pathname
может быть
символьной
ссылкой,
повисшей
или нет.
- ENAMETOOLONG
- Если
длина
полного
имени
файла
(включая
путь) pathname
больше чем
PATH_MAX или
длина
имени
файла
больше чем
NAME_MAX. В общем
случае в
системах,
соответствующих
стандарту
GNU,
отсутствует
ограничение
на длину
полного
имени
файла,
однако
некоторые
файловые
системы
могут
устанавливать
ограничение
на длину
отдельного
компонента.
- ENOENT
- Один из
каталогов
в pathname не
существует
или
является
повисшей
символьной
ссылкой.
- ENOSPC
- В
каталоге
или
файловой
системе
закончились
места для
новых
файлов.
- ENOTDIR
- Компонент
пути,
использованный
как
каталог в
pathname, в
действительности
таковым не
является.
- ENOTDIR
- (mkfifoat()) pathname is a relative pathname
and dirfd is a file descriptor referring to a file other than a
directory.
- EROFS
-
pathname
указывает
на
файловую
систему,
доступную
только для
чтения.
mkfifoat() was added in glibc 2.4. It is implemented using
mknodat(2), available since 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)
Русский
перевод
этой
страницы
руководства
был сделан
aereiae <
[email protected]>, Alexey <
[email protected]>, Azamat
Hackimov <
[email protected]>, Dmitriy S. Seregin
<
[email protected]>, Dmitry Bolkhovskikh <
[email protected]>,
ITriskTI <
[email protected]>, Max Is <
[email protected]>, Yuri
Kozlov <
[email protected]>, Иван
Павлов <
[email protected]>
и Малянов
Евгений
Викторович
<
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]