Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.os.linux.development.apps > #304
| From | Rainer Weikusat <rweikusat@mssgmbh.com> |
|---|---|
| Newsgroups | comp.os.linux.development.apps |
| Subject | Re: How to dup a FILE* |
| Date | 2011-12-07 17:52 +0000 |
| Message-ID | <8762hs6zhp.fsf@sapphire.mobileactivedefense.com> (permalink) |
| References | <jbkl2v$a75$1@nntp.ts.fujitsu.com> <20111206195333.49dd7a9d@dwnoon.ntlworld.com> <8762hto2p4.fsf@sapphire.mobileactivedefense.com> <20111206214641.3265e741@dwnoon.ntlworld.com> |
David W Noon <dwnoon@spamtrap.ntlworld.com> writes: > On Tue, 06 Dec 2011 20:38:47 +0000, Rainer Weikusat wrote about Re: How > to dup a FILE*: [...] >>> I think you're over-complicating things here. After all, stderr is >>> simply a pointer. So, cache the old pointer; open a new file stream >>> stored in stderr; fclose(stderr) when done; reinstate the original >>> pointer. >> >>That's a thoroughly stupid idea because it won't affect output to >>'standard error filedescriptor' which doesn't go through the stderr >>stream *and* while the glibc documentation claims that this should >>work, it actually doesn't (or at least didn't for some random version >>where I tried this about ten years ago -- only to be told that I >>"should use freopen instead" by Ulrich Drepper [which I couldn't do >>because I was trying to divert the output to a socket]). > > The C Standard Library does not provide "file descriptors" with any > specified meaning, only as opaque integers. The 'C standard library' doesn't provide file descriptors at all. On systems supporting the UNIX(*) API, 'file descriptor' is usually an abstraction provided by the kernel. > Consequently, all error logging *should* be done using the stderr > stream, not fd of 2. It is only a happenstance of platform-specific > shells and run-time libraries (e.g. glibc) that stderr defaults to > fd of 2 on UNIX-like systems. The <unistd.h> header shall define the following symbolic constants for file streams: STDERR_FILENO File number of stderr; 2. STDIN_FILENO File number of stdin; 0. STDOUT_FILENO File number of stdout; 1. [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/unistd.h.html] Also, The <stdio.h> header shall define the following macros which shall expand to expressions of type "pointer to FILE" that point to the FILE objects associated, respectively, with the standard error, input, and output streams: stderr Standard error output stream. stdin Standard input stream. stdout Standard output stream. [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdio.h.html] Note that this say 'expression' and not 'modifiable lvalue' as the errno definition does.
Back to comp.os.linux.development.apps | Previous | Next — Previous in thread | Find similar
How to dup a FILE* Josef Moellers <josef.moellers@ts.fujitsu.com> - 2011-12-06 09:51 +0100
Re: How to dup a FILE* Richard Kettlewell <rjk@greenend.org.uk> - 2011-12-06 09:16 +0000
Re: How to dup a FILE* Josef Moellers <josef.moellers@ts.fujitsu.com> - 2011-12-06 10:41 +0100
Re: How to dup a FILE* Jasen Betts <jasen@xnet.co.nz> - 2011-12-06 13:28 +0000
Re: How to dup a FILE* Josef Moellers <josef.moellers@ts.fujitsu.com> - 2011-12-06 16:57 +0100
Re: How to dup a FILE* David W Noon <dwnoon@spamtrap.ntlworld.com> - 2011-12-06 19:53 +0000
Re: How to dup a FILE* Rainer Weikusat <rweikusat@mssgmbh.com> - 2011-12-06 20:38 +0000
Re: How to dup a FILE* Richard Kettlewell <rjk@greenend.org.uk> - 2011-12-06 22:03 +0000
Re: How to dup a FILE* David W Noon <dwnoon@spamtrap.ntlworld.com> - 2011-12-06 21:46 +0000
Re: How to dup a FILE* Rainer Weikusat <rweikusat@mssgmbh.com> - 2011-12-07 17:52 +0000
csiph-web