This is the mail archive of the
glibc-bugs@sources.redhat.com
mailing list for the glibc project.
[Bug libc/682] stdout and file descriptor mismatch after a freopen()
- From: "gotom at debian dot or dot jp" <sourceware-bugzilla at sources dot redhat dot com>
- To: glibc-bugs at sources dot redhat dot com
- Date: 14 Feb 2005 15:47:44 -0000
- Subject: [Bug libc/682] stdout and file descriptor mismatch after a freopen()
- References: <20050119161710.682.vincent+libc@vinc17.org>
- Reply-to: sourceware-bugzilla at sources dot redhat dot com
------- Additional Comments From gotom at debian dot or dot jp 2005-02-14 15:47 -------
I don't understand how to implement your proposal: "A correct behavior
would be to reserve file descriptors 0, 1 and 2 for stdin, stdout and
stderr at the fopen/fclose/freopen level".
BTW, looking through the discussion in bug 670, I think the following
interpretation of freopen() can provide your request:
- interpret freopen() that freopen(path, mode, fp) assigns the same
fd number which is previously used in fp (using dup2()).
This is known as BSD freopen() behavior.
However, I know this behavior has problem because there's race
condition between fd=open(path) and dup2(fd, fp->fd) - the fd
specified in the 2nd argument of dup2() is possibly used for the other
purpose when signal handler is called or concurrent thread is running
at the same time.
In order to fix this race condition, the 2nd argument of dup2() should
be the original fp->fd - but unfortunatelly standards say freopen()
should always close the fp in first, so we can't avoid this problem.
I marked it as invalid until you propose the correct implementation.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |INVALID
http://sources.redhat.com/bugzilla/show_bug.cgi?id=682
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.