Unnamed pipes are similar to named pipes, but they do not exist in the file system. They have no pathnames associated with them, and they and all their remnants disappear after the final file descriptor that references them is closed. They are almost exclusively used for interprocess communication between a child and parent processes or between sibling processes.
Shells use unnamed pipes to execute commands such as ls | head. The ls process writes to the same pipe that head reads its input from, yielding the results the user intended.
Creating an unnamed pipe results in two file descriptors, one of which is read-only and the other one of which is write-only.
#include <unistd.h> int pipe(int fds);
The sole parameter is filled in with the two returned file descriptors, fds for reading and fds for writing.