PLUMBER(4)                                             PLUMBER(4)

     NAME
          plumber - file system for interprocess messaging

     SYNOPSIS
          plumber [ -p plumbing ]

     DESCRIPTION
          The plumber is a user-level file server that receives, exam-
          ines, rewrites, and dispatches plumb(7) messages between
          programs.  Its behavior is programmed by a plumbing file
          (default $HOME/lib/plumbing) in the format of plumb(7).

          Its services are posted via 9pserve(4) as plumb.  and con-
          sist of two pre-defined files, plumb/send and plumb/rules,
          and a set of output ports for dispatching messages to appli-
          cations.

          Programs use fswrite (see 9pclient(3)) to deliver messages
          to the send file, and fsread to receive them from the corre-
          sponding port.  For example, sam(1)'s plumb menu item or the
          B command cause a message to be sent to plumb/send; sam in
          turn reads from, by convention, plumb/edit to receive mes-
          sages about files to open.

          A copy of each message is sent to each client that has the
          corresponding port open.  If none has it open, and the rule
          has a plumb client or plumb start rule, that rule is
          applied.  A plumb client rule causes the specified command
          to be run and the message to be held for delivery when the
          port is opened.  A plumb start rule runs the command but
          discards the message.  If neither start or client is speci-
          fied and the port is not open, the message is discarded and
          a write error is returned to the sender.

          The set of output ports is determined dynamically by the
          specification in the plumbing rules file: a port is created
          for each unique destination of a plumb to rule.

          The set of rules currently active may be examined by reading
          the file plumb/rules; appending to this file adds new rules
          to the set, while creating it (opening it with OTRUNC)
          clears the rule set.  Thus the rule set may be edited dynam-
          ically with a traditional text editor.  However, ports are
          never deleted dynamically; if a new set of rules does not
          include a port that was defined in earlier rules, that port
          will still exist (although no new messages will be delivered
          there).

     FILES
          $HOME/lib/plumbing  default rules file

     PLUMBER(4)                                             PLUMBER(4)

          /plumb              directory to search for files in include
                              statements
          plumb               mount name for plumber(4).

     SOURCE
          /src/cmd/plumb

     SEE ALSO
          plumb(1), plumb(3), plumb(7)