10-19-04 01:48 AM
This problem occurs on both Free BSD and Linux.
I have a parent-child situation, where the parent creates two pipes,
and then forks(), then the child exec's a sort. The parent then reads
the pipe to get the sorted output. SO...
parent:
establishes 2 pipes pfd1 and pfd2 which have both read and
write ends. Parent writes records to The write end of the
pipe connected to STDIN of the child.
child:
dup2() the pipe ends, the read end of pfd1 to STDIN and the write end
of pfd2 to STDOUT. The child then execlp() /usr/bin/sort -n.
Sort reads the input, does it's thing, then writes the output. The
parent reads the pfd2 read end, and manipulates the sorted output.
The problem is, I never see the EOF on the sorted output.
I found that the read loop in the parent could terminate on a
waitpid() or by using a signal handler for SIGCHLD, and a variable
shared between the signal handler and the parent code, I could
terminate the read loop. But I never saw the read() terminate with a
count of 0 indicating EOF.
Since this situation behaved uniformly over Linux, FreeBSD current,
and dragonfly-BSD, I suspect I am running into a subtlety that is
architected.
Anybody got any clues for me?
--
Derek Tattersall | Nothing cures insomnia like the realization that
| it's time to get up.
dlt@mebtel.net |
|
dlt666@yahoo.com |
[ Post a follow-up to this message ]
|