This is the mail archive of the cygwin mailing list for the Cygwin project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Jan 15 11:39, Tom Honermann wrote: > 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()). Still, SUSv4 says: The exit() function shall then flush all open streams with unwritten buffered data and close all open streams. Finally, the process shall be terminated [...] Note that exit only flushes streams with *unwritten* data, but not streams with *unread* data. So this testcase is still valid and should work. Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Maintainer cygwin AT cygwin DOT com Red Hat
Attachment:
pgpP4ODiGx7vw.pgp
Description: PGP signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |