[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#6900: pitfalls of recoding named fifo as pipe
From: |
John Reiser |
Subject: |
bug#6900: pitfalls of recoding named fifo as pipe |
Date: |
Wed, 25 Aug 2010 07:14:38 -0700 |
User-agent: |
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100430 Fedora/3.0.4-2.fc11 Thunderbird/3.0.4 |
On 08/24/2010 11:32 AM, Paul Eggert wrote:
> dir=$(mktemp -d dir.XXXXXX)
> mkfifo $dir/1 $dir/2
> listener1 < $dir/1
> listener2 < $dir/2
> cmd1 2> $dir/1 | cmd2 2> $dir/2
> Better yet, do not use named fifos, since pipes suffice:
>
> (cmd1 2>&1 >&3 | listener1) 3>&1 |
> (cmd2 2>&1 >&3 | listener2) 3>&1
That is not equivalent! stdout from listener1 gets piped into
cmd2, instead of going to the common stdout of all processes
other than cmd1. Fixing this using only anonymous pipes
is cumbersome because the additional file descriptor must be
[should be] redirected by all four processes.
Also, file descriptor 3 is left open in all processes, which
hogs system resources and is less safe.
Therefore something like this is required:
4>&1 (
3>&1 ( 1>&3 2>&1 3>&- 4>&- cmd1
| 1>&4 3>&- 4>&- listener1
)
|
3>&1 4>&- ( 1>&3 2>&1 3>&- cmd2
| 3>&- listener2
)
)
where the formatting emphasizes prefix actions and common elements.
Using the named fifos is much more readable and understandable.
The cost is explicit cleanup, including the transfer of the onus
for recovery at resource exhaustion (fd not available, space
not available in filesystem) from the shell to the user.
--
- bug#6900: mktemp: want option to make a fifo, (continued)
- bug#6900: mktemp: want option to make a fifo, Eric Blake, 2010/08/23
- bug#6900: mktemp: want option to make a fifo, Paul Eggert, 2010/08/23
- bug#6900: mktemp: want option to make a fifo, John Reiser, 2010/08/24
- bug#6900: mktemp: want option to make a fifo, Paul Eggert, 2010/08/24
- bug#6900: mktemp: want option to make a fifo, Paul Eggert, 2010/08/24
- bug#6900: mktemp: want option to make a fifo, John Reiser, 2010/08/24
- bug#6900: mktemp: want option to make a fifo, Paul Eggert, 2010/08/24
- bug#6900: mktemp: want option to make a fifo, John Reiser, 2010/08/24
- bug#6900: mktemp: want option to make a fifo, Paul Eggert, 2010/08/24
- bug#6900: mktemp: want option to make a fifo, John Reiser, 2010/08/24
- bug#6900: pitfalls of recoding named fifo as pipe,
John Reiser <=
- bug#6900: pitfalls of recoding named fifo as pipe, Paul Eggert, 2010/08/25