Named Pipes (FIFOs) on Unix with multiple readers

fifo, unix

Solution

The O in FIFO means "out". Once your data is "out", it's gone. :-) So naturally if another process comes along and someone else has already issued a read, the data isn't going to be there twice.

To accomplish what you suggest you should look into Unix domain sockets. Manpage here. You can write a server which can write to client processes, binding to a filesystem path. See also `socket()`, `bind()`, `listen()`, `accept()`, `connect()`, all of which you'll want to use with `PF_UNIX`, `AF_UNIX`, and `struct sockaddr_un`.

Problem

I have two programs, Writer and Reader. I have a FIFO from Writer to Reader so when I write something to stdin in Writer, it gets printed out to stdout from Reader. I tried doing this with TWO Readers open, and I got output to stdout from only one of the two Reader programs. Which Reader program Unix chooses to print stdout from seemed to be arbitrary each time I run this, but once it chooses one of the programs, each output to stdout gets printed from the same Reader program. Does anyone know why this happens? If I have two WRITER programs, they both write to the same pipe okay.

Original source