A fifo(7), or "named pipe" is a character device, that when is opened by one process for reading, and another for writing, allows inter-process communication.
This is similar to how you can use a pipe(7), but does not require both processes to be started by a common ancestor.
This can be demonstrated in two terminals. In the first run:
$ mkfifo test.fifo $ cat test.fifo
In the second run:
$ cat >test.fifo
Now when you enter lines of text into the second terminal, they will be output on the first.
fifos also have another trick up their sleeves, as when a process opens a fifo, it will block until the other end has been opened.
Using this ephemeral-launch script, we can start an echo server on a random port, and have a client block until the server is ready, and also report which port should be used.
In one terminal run:
$ mkfifo test.fifo $ ephemeral-launch --port-file test.fifo cat
In a second terminal run:
$ port="$(cat test.fifo)" $ nc 127.0.0.1 "$port"
Now when you enter lines of text into the second terminal, it will echo them back.
Because the processes block on the open,
cat test.fifo in the second terminal will block
ephemeral-launch process has bound the port
and written it out to the fifo.