Filtering I/O -- both of them.
Conor P. Cahill
cpcahil at virtech.uucp
Mon Jul 9 08:31:03 AEST 1990
In article <1990Jul8.120742.18213 at lth.se> d89cb at efd.lth.se (Christian Brunschen) writes:
>So I thought of :
>* creating two pipes
>* fork()ing
>* in the child process, redirect stdin to one pipe & stdout to the other
You have to be very carefule to avoid a deadlock when using pipes in both
directions between two processes.
>BUT (and here's my question) :
>how do I actually redirect stdin / stdout to the pipes I created ?
>stdin = fdopen (MyPipe [1], "r");
This is real close. what you do is:
(void) fclose(stdin); /* close stdin */
(void) close(0); /* should be unnecessary */
i = dup(pipe_read_fd); /* i should be 0 */
(void) fdopen(i, "r"); /* stdin should map to pipe 0 */
close(pipe_read_fd); /* dont need anymore */
The reason for doing the dup() & fdopen is to ensure that fd0 gets
assigned to stdin since there may be software that does a read(0,...).
Note that I did no error checking. You should add the appropriate error
checking for each step (other than the close(0) which should fail if
stdin was appropriately mapped to 0).
--
Conor P. Cahill (703)430-9247 Virtual Technologies, Inc.,
uunet!virtech!cpcahil 46030 Manekin Plaza, Suite 160
Sterling, VA 22170
More information about the Comp.lang.c
mailing list