---
name: "multitee"
section: "1"
platform: "linux"
package: "multitee"
version: "3.0-6.1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/multitee"
---

# multitee(1)

send multiple inputs to multiple outputs

## NAME

multitee - send multiple inputs to multiple outputs

## SYNTAX

multitee \[ **-b***size* *\] \[* **-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,* ***e**fd* *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:*

- **-b***size*

  *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)](/tee/1.md)*
