Cоздать однонаправленный канал данных
#include <unistd.h>int pipe( int fildes[2] );
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 канала для обновления.
-1
, код ошибки записывается в errno.
POSIX 1003.1
errno, fcntl(), nbaconnect(), open(), popen(), read(), write()
pipe в Справочнике по утилитам
Предыдущий раздел: Описание API системной библиотеки