Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.os.linux.development.apps > #304

Re: How to dup a FILE*

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>

Show all headers | View raw


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 | NextPrevious in thread | Find similar


Thread

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