Mail Archives: djgpp-workers/2001/03/23/06:27:01
> From: "Mark E." <snowball3 AT bigfoot DOT com>
> Date: Thu, 22 Mar 2001 13:19:09 -0500
>
> > How is this supposed to be used? Could you give an example of a
> > real-life usage in Bash?
>
> pipe() is used by the command substitution and pipeline portions of Bash. In
> the case of command substituion, Bash essentially does this:
> pipe(fildes)
> dup2(fildes[1], 1) /* write end of pipe now stdout */
> /* perform command */
> /* read command output from read end of pipe */
>
> Pipelines such as 'a | b' are more complicated:
> pipe(fildes1)
> dup2(fildes1[1], 1) /* Write end of pipe 1 is now stdout */
> /* run 'a' */
> dup2(fildes1[0], 0) /* Read in of pipe 1 is now stdin */
> close(fildes1[1]) /* Done with write end of pipe 1*/
> /* run 'b' */
> close(fildes1[0]) /* Done with read end of pipe 1 */
Thanks for the explanations.
I really think Bash should have used `popen'/`pclose' in this case.
Since we don't support fork, you'd need to change the Bash sources
anyway; if they used `popen' for systems such as DJGPP, the original
sources would not need to be hacked.
But, if it helps to port Bash, then as long as the docs says that
users should not be tempted to do a fork/exec after a call to `pipe',
I think it's okay to add this.
- Raw text -