Article View: comp.std.c
Article #4772Re: Binary Mode stdin/stdout
From: Nick Maclaren
Date: Thu, 08 Feb 1996 10:26
Date: Thu, 08 Feb 1996 10:26
46 lines
2844 bytes
2844 bytes
In article <4fbk81$qk@cortex.dialin.rrze.uni-erlangen.de>, mskuhn@unrza3.dialin.rrze.uni-erlangen.de (Markus Kuhn) writes: |> clive@stdc.demon.co.uk (Clive D.W. Feather) writes: |> |> >In article <4f67kg$11g@cortex.dialin.rrze.uni-erlangen.de>, |> >Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de> wrote: |> >> Why isn't there a standard way of allowing an ISO C program to switch |> >> the standard input and output into binary transparent mode (as with |> >> the "b" flag in fopen()/freopen() for normal files)? |> >> |> >> Has this just been forgotten or is there a good technical reason? |> |> >On some implementations, this decision has to be made at the time you |> >open the file and can't be changed. |> |> I would already be happy with a portable function that allows to |> switch stdin or stdout to binary mode and that has only a well-defined |> behaviour according to the standard if this switch occurs before any |> byte has been written to or read from the stream. This would cause no |> headaches on your computing fossil (because inserting a newline during |> a later switch would not be non-conforming) and would be sufficient |> for all important applications I can think of (like zcat). In article <4fbnr3$veg@usenet.pa.dec.com>, diamond@tko.dec.com (Norman Diamond) writes: |> |> I'll take your word for it. I suppose the operating system would require |> the program to close the file and reopen it, so that is what the C standard |> requires the C program to do. (This is also why the C standard requires C |> programs to simulate long int arithmetic on their own instead of building |> it into the language, since some hardware doesn't have it, right?) Sorry, but these wouldn't work even on UNIX. Not all 'files' can be closed and reopened - think of rewinding tapes, for example! Even on MVS, it would be possible to have a run-time flag that selected between binary and text for stdin and stdout, but this would have nothing to do with the C standard. When I wrote my interface, I never provided this because I regarded it as being more confusion than it was worth - remember that C binary I/O does not map well onto MVS sequential files. Nick Maclaren, University of Cambridge Computer Laboratory, New Museums Site, Pembroke Street, Cambridge CB2 3QG, England. Email: nmm1@cam.ac.uk Tel.: +44 1223 334761 Fax: +44 1223 334679
Technical Details
Message-ID:
<4fcj5f$2ft@lyra.csx.cam.ac.uk>Path:
arc1-ca.pugleaf.net!lyra.csx.cam.ac.uk!nmm1References:
<4f67kg$11g@cortex.dialin.rrze.uni-erlangen.de> <DME74w.4M4@stdc.demon.co.uk> <4fbnr3$veg@usenet.pa.dec.com>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!lyra.csx.cam.ac.uk!nmm1 From: nmm1@cus.cam.ac.uk (Nick Maclaren) Newsgroups: comp.std.c Subject: Re: Binary Mode stdin/stdout Date: 8 Feb 1996 10:26:55 GMT Organization: University of Cambridge, England Message-ID: <4fcj5f$2ft@lyra.csx.cam.ac.uk> References: <4f67kg$11g@cortex.dialin.rrze.uni-erlangen.de> <DME74w.4M4@stdc.demon.co.uk> <4fbnr3$veg@usenet.pa.dec.com> NNTP-Posting-Host: ursa.cus.cam.ac.uk