Pipefile uses bind(2) to attach a pair of pipes to file, using
them to interpose filter commands between the true file and the
simulated file that subsequently appears in the name space. Option
–r interposes a filter that will affect the data delivered to programs
that read from file; –w interposes a filter that will affect the
data written by programs to file. At least one command must be
specified; pipefile will insert a cat(1) process in the other
direction.

After pipefile has been run, the filters are established for programs
that subsequently open the file; programs already using the file
are unaffected.

Pipefile opens the file twice, once for each direction. If the
file is a single–use device, such as /dev/mouse, use the –d flag
to specify that the file is to be opened once, in ORDWR mode.

The I/O model of pipefile is peculiar; it doesn't work well on
plain files. It is really intended for use with continuous devices
such as /dev/cons and /dev/mouse. Pipefile should be rewritten
to be a user–level file system.

If the program using the file managed by pipefile exits, the filter
will see EOF and exit, and the file will be unusable until the
name space is repaired.