Важное отличие pip'a от файла заключается в том, что прочитанная информация немедленно удаляется из него и не может быть прочитана повторно.
Pipe можно представить себе в виде трубы ограниченной емкости, расположенной внутри адресного пространства операционной системы, доступ к входному и выходному отверстию, в которой осуществляется с помощью системных вызовов. В действительности pipe представляет собой область памяти, недоступную пользовательским процессам напрямую, зачастую организованную в виде кольцевого буфера (хотя существуют и другие виды организации). По буферу при операциях чтения и записи перемещаются два указателя, соответствующие входному и выходному потокам. При этом выходной указатель никогда не может перегнать входной и наоборот. Для создания нового экземпляра такого кольцевого буфера внутри операционной системы используется системный вызов pipe().
Прототип системного вызова:
#include <unistd.h>
int pipe(int *fd);
Описание системного вызова
Системный вызов pipe предназначен для создания pip'a внутри операционной системы.
Параметр fd является указателем на массив из двух целых переменных. При нормальном завершении вызова в первый элемент массива - fd[0] - будет занесен файловый дескриптор, соответствующий выходному потоку данных pip'a и позволяющий выполнять только операцию чтения, а во второй элемент массива – fd[1] - будет занесен файловый дескриптор, соответствующий входному потоку данных и позволяющий выполнять только операцию записи.