|  | 
 NAME     
 |  |  |  | plumber – file system for interprocess messaging 
 | 
 SYNOPSIS     
 DESCRIPTION     
 |  |  |  | The plumber is a user-level file server that receives, examines,
    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 consist of
    two pre-defined files, plumb/send and plumb/rules, and a set of
    output ports for dispatching messages to applications. 
    
    
    Programs use fswrite (see 9pclient(3)) to deliver messages to
    the send file, and fsread to receive them from the corresponding
    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 messages 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 specified
    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 dynamically 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     
 SOURCE     
 SEE ALSO     
 |  |