Man Linux: Main Page and Category List

NAME

       multitee - send multiple inputs to multiple outputs

SYNTAX

       multitee [ -bsize ] [ -vQq ] [ fd-fd,fd,fd...  ] ...

DESCRIPTION

       multitee  sends multiple inputs to multiple outputs.  Given an argument
       of the form fdin-fdout,fdout,fdout...  it will send all input  on  file
       descriptor  fdin  to each descriptor fdout.  It will exit when all fdin
       are closed.  Several arguments may specify outputs from the same  fdin.

       -fdout  and  ,fdout  are  equivalent.  If there is an error of any sort
       (including SIGPIPE) in writing to fdout, multitee prints a  warning  on
       stderr  and  forgets  fdout  entirely.   (This  doesn’t affect reads on
       fdin.)  If -fdout is replaced by :fdout then multitee  will  exit  upon
       any SIGPIPEs from that descriptor.

       Furthermore,  efd means that as soon as fdin reaches end of file, fd is
       considered to reach EOF as well.  multitee will warn  about  any  input
       errors and then treat them like EOF.

       Unlike  tee,  multitee  tries  its  best  to  continue  processing  all
       descriptors even while some of them are blocked. However, it  will  get
       stuck  reading  if someone else is reading the descriptor and grabs the
       input first; it will get stuck writing if an input packet does not  fit
       in  an  output  pipe.   (If  the  output descriptor has NDELAY set, and
       multitee receives EWOULDBLOCK, it writes one byte at a  time  to  avoid
       pipe  synchronization  problems.)   While  it  is  tempting  to set the
       descriptors to non-blocking mode, this is  dangerous:  other  processes
       using  the  same  open file may not be able to deal with NDELAY.  It is
       incredible that none of the major UNIX vendors or standards  committees
       has come up with true per-process non-blocking I/O.  (Under BSD 4.3 and
       its variants, multitee could send timer signals to  itself  rapidly  to
       interrupt  any  blocking  I/O. However, this cannot work under BSD 4.2,
       and is generally more trouble than it’s  worth.)   A  program  can  set
       NDELAY  before  invoking  multitee  if it knows that no other processes
       will use the same open file.

       multitee will also temporarily stop reading an input descriptor if more
       than 8192 bytes are pending on one of its output descriptors. This does
       not affect independent fdin-fdout pairs.

       multitee has several flags:

       -bsize      Change input buffer size from 8192  to  size.   Unlike  the
                   previous version of multitee, this version does not require
                   output buffers, and does not copy  bytes  anywhere  between
                   read() and write().

       -v          Verbose.

       -q          Quiet.  multitee will not use stderr in any way (except, of
                   course, if descriptor 2 is specified in an argument).

       -Q          Normal level of verbosity.

EXIT VALUE

       0 normally.  1 for usage messages.  3 if multitee runs out  of  memory.
       4 in various impossible situations.

DIAGNOSTICS

       fatal: out of memory
              multitee has run out of memory.

       warning: cannot read descriptor
              Self-explanatory.

       warning: cannot write descriptor
              Self-explanatory.

EXAMPLES

       multitee 0-1,4,5 4>foo 5>bar

       Same as tee foo bar except for better blocking behavior.

       multitee 0:1 3:1 4:1,2 6:7

       Merge  several  sources  into  the output, meanwhile copying 6 to 7 and
       recording 4’s input in 2.

       tcpclient servermachine smtp multitee 0:7 6:1e0

       Same as mconnect on Suns.  The e0 tells multitee to quit as soon as the
       network connection closes.

RESTRICTIONS

       multitee  expects  all  descriptors  involved  to be open.  Currently a
       closed descriptor acts like an  open  descriptor  which  can  never  be
       written to.

BUGS

       None known.

VERSION

       multitee version 3.0, 7/22/91.

AUTHOR

       Placed into the public domain by Daniel J. Bernstein.

SEE ALSO

       tee(1)

                                                                   multitee(1)