Named Pipes

- Named Pipes

# Named Pipes

A named pipe (often referred to as a FIFO) is an old Unix IPC mechanism for processes communicating on the same machine. It works just like a regular, connected anonymous pipes, except that the processes rendezvous using a filename and don't have to be related.

To create a named pipe, use the `POSIX::mkfifo()` function.

        use POSIX qw(mkfifo);
        mkfifo($path, 0700) or die "mkfifo $path failed: $!";

You can also use the Unix command `mknod(1)` or on some systems, mkfifo(1). These may not be in your normal path.

        # system return val is backwards, so && not ||
        #
        $ENV{PATH} .= ":/etc:/usr/etc";
        if  (      system('mknod',  $path, 'p')
                && system('mkfifo', $path) )
        {
            die "mk{nod,fifo} $path failed";
        }

A fifo is convenient when you want to connect a process to an unrelated one. When you open a fifo, the program will block until there's something on the other end.

For example, let's say you'd like to have your .signature file be a named pipe that has a Perl program on the other end. Now every time any program (like a mailer, news reader, finger program, etc.) tries to read from that file, the reading program will block and your program will supply the new signature. We'll use the pipe-checking file test -p to find out whether anyone (or anything) has accidentally removed our fifo.

        chdir; # go home
        $FIFO = '.signature';

        while (1) {
            unless (-p $FIFO) {
                unlink $FIFO;
                require POSIX;
                POSIX::mkfifo($FIFO, 0700)
                    or die "can't mkfifo $FIFO: $!";
            }

            # next line blocks until there's a reader
            open (FIFO, "> $FIFO") || die "can't write $FIFO: $!";
            print FIFO "John Smith (smith\@host.org)\n", `fortune -s`;
            close FIFO;
            sleep 2;    # to avoid dup signals
        }

- Back to Handling the SIGHUP Signal in Daemons in the perlipc manpage

- Forward to Deferred Signals (Safe Signals) in the perlipc manpage

- Up to the perlipc manpage

Named Pipes