Newsgroup: comp.lang.c


Date: Wed, 12 Apr 2006 23:48:56 +0300
From: Diomidis Spinellis <dds@aueb.gr>
Organization: Athens University of Economics and Business
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060130 SeaMonkey/1.0
MIME-Version: 1.0
Newsgroups: comp.lang.c
Subject: Re: fgetc() vs. fread()
References: <20060412182901.2bb881a6.ahman@cyberspace.org>
In-Reply-To: <20060412182901.2bb881a6.ahman@cyberspace.org>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable
M. =C5hman wrote:
> I'm reading "C: A Reference Manual" but still can't understand a
> very basic thing: is there any functional difference between
> fgetc/fputc and fread/fwrite (when reading/writing one unsigned
> char)?
>=20
> 1. Books and documentation on C tell me fread and fwrite is "binary".
> What does binary mean in this? Anything to do with opening a file
> in binary mode?

On systems (like Microsoft Windows) that have different conventions for=20
text and "binary" files opening a file in binary mode will affect both=20
fread/fwrite and fgetc/fputc.   The expalanation for what you've read is =

that the fread/fwrite interface is more suited for processing files=20
containing binary data, whereas the getc/putc interface is more suited=20
for processing text files.

For example, the Unix dump command reads user data records from the=20
(binary-structured) utmp file directly into the corresponding utmp=20
struct using the following fread call:

struct	utmp	utmp;
if (fread((char *) &utmp, sizeof (struct utmp), 1, f_utmp) !=3D 1)

while the Unix cat command removes successive newlines from=20
(text-structured) files using the following getc call:

         for (prev =3D '\n'; (ch =3D getc(fp)) !=3D EOF; prev =3D ch) {
                 if (prev =3D=3D '\n') {
                         if (ch =3D=3D '\n') {

Nothing prevents you from processing text files with fread/fwrite (for=20
example by reading chunks into a large buffer) or binary files with=20
getc/putc (for example by assembling the data into variables by=20
hand-crafted code).

--=20
Diomidis Spinellis
Code Quality: The Open Source Perspective (Addison-Wesley 2006)
http://www.spinellis.gr/codequality




Newsgroup comp.lang.c contents
Newsgroup list
Diomidis Spinellis home page

Creative Commons License Unless otherwise expressly stated, all original material on this page created by Diomidis Spinellis is licensed under a Creative Commons Attribution-Share Alike 3.0 Greece License.