fork() + file descriptor bug in 1.7.27(0.271/5/3) 2013-12-09 11:54
Tom Honermann
thonermann@coverity.com
Wed Jan 15 16:40:00 GMT 2014
On 01/13/2014 11:06 AM, tednolan@bellsouth.net wrote:
...
> switch (fork()) {
>
> /* error */
> case -1:
...
> /* child */
> case 0:
> fprintf(stderr, "child\n"); fflush(stderr);
> exit(0);
> break;
The above code is incorrect. It is always wrong to call exit() from a
forked process that has not yet called one of the exec() family of
functions. _exit() should be called instead. Best case, calling exit()
will result in double flushing of any stream buffers held by the parent
at the time fork() is called (since the buffers will (eventually) be
flushed by the parent as well as the child (unless at least one of the
processes aborts or exits with _exit()).
Tom.
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
More information about the Cygwin
mailing list