How to send EOF to the popen(3) pipe?
Montgomery-Smith, Stephen
stephen at missouri.edu
Sat Jan 16 18:08:58 UTC 2016
On 01/16/2016 11:59 AM, Yuri wrote:
> On 01/15/2016 20:35, Montgomery-Smith, Stephen wrote:
>> Maybe I am displaying my ignorance. But wouldn't you do this by
>> invoking the function pclose?
>
> No, pclose kills the process and returns the exit code. Half-closed
> connection though can be alive for a while, until the other side
> finishes and closes the pipe.
>
>> My memory of using this was that this could gridlock because of
>> buffering. Suppose process A popens a process B. A sends a message to
>
> Gridlocks are possible if reads/writes are performed in the wrong order.
> But this is besides the point of the original question.
>
> I think the answer to my question is "no". popen(3) can't send EOF.
> Protocol needs to support EOF signal on the application-level.
Yes. I think a "proper" implementation would be via a function like
popen2 https://emergent.unpythonic.net/01108826729, which creates 2 file
handles, not just one. Then to send the EOF, you would close one of the
file handles (the "to_child"), and then only close the other file handle
(the "from_child") when it receives an EOF.
For the popen2 code to be compatible with stdio, you should run fdopen
on each file descriptor to create FILE*s.
More information about the freebsd-hackers
mailing list