mkfifo
From NetBSD Wiki
The mkfifo(1) command creates a FIFO (First-In, First-Out), also known as a "named pipe". This command creates a file which, when written to or read out of, has the same semantics as a direct pipe between two commands.
This means that
$ ls | less
is more or less equivalent to
$ mkfifo foo $ ls > foo [on another terminal] $ less < foo
The FIFO will "halt" the program that writes to it ((More technically, it will put it into a blocked state, keeping it in the sleeping processes queue until it is unblocked when a reader becomes available. The reader will in turn be put asleep when there is no writer available.)) , which is why you need to switch to another terminal. You can also background it with shell's & operator.
Their practical use is limited to pretty specific situations (example: work around crappy non-Unix programs ported to Unix which only support reading/writing ordinary files instead of proper stdin/stdout/stderr behaviour). Only one program can read from a FIFO at a time, and only one can write to it at the same time. In case of multiple programs reading/writing from/to it, the behaviour can be pretty random.
FIFOs can be deleted like any other file with rm(1).
