pipe()

Cоздать однонаправленный канал данных

Прототип:

#include <unistd.h>
int pipe( int fildes[2] );

Аргументы:

fildes
Массив, в котором функция может хранить файловые дескрипторы для концов канала.

Библиотека:

libc

Описание:

Функция pipe() создает канал (безымянный FIFO) и помещает файловый дескриптор для конца чтения канала в fildes[0], а файловый дескриптор для конца канала записи в fildes[1]. Их целочисленные значения являются двумя наименьшими доступными во время вызова функции pipe(). Флаг O_NONBLOCK сбрасывается для обоих файловых дескрипторов. (Чтобы установить флаг O_NONBLOCK необходимо использовать fcntl()).

Имеется возможность записать данные в файловый дескриптор fildes[1] и прочитать их из файлового дескриптора fildes[0]. Если данные считываются из файлового дескриптора fildes[0], то он возвращает данные, записанные в fildes[1], в порядке очереди (FIFO).

Буфер канала выделяется менеджером ресурсов pipe().

Обычно эта функция используется для подключения стандартных утилит, действующих как фильтры, передавая конец записи канала в процесс, производящий данные, в качестве его STDOUT_FILENO, и конец чтения канала в процесс, потребляющий данные, в качестве его STDIN_FILENO. (либо с помощью традиционных вызовов fork(), dup2() или exec*(), либо с помощью вызовов spawn*()).

В случае успеха pipe() помечает поля st_ftime, st_ctime, st_atime и st_mtime канала для обновления.

Возвращаемое значение:

0
Успешное завершение.
-1
Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

EMFILE
У вызывающего процесса нет как минимум двух неиспользуемых файловых дескрипторов.
ENFILE
Количество одновременно открытых файлов в системе превысит настроенный лимит.
ENOSPC
Недостаточно места для выделения буфера канала.
ENOSYS
Не работает менеджер каналов.
EROFS
Пространство пути канала является файловой системой только для чтения.

Классификация:

POSIX 1003.1

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

errno, fcntl(), nbaconnect(), open(), popen(), read(), write()

pipe в Справочнике по утилитам




Предыдущий раздел: Описание API системной библиотеки