Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Jul 2007 01:45:52 +0200
From:      "Heiko Wundram (Beenic)" <wundram@beenic.net>
To:        freebsd-hackers@freebsd.org
Subject:   Re: Large gap between fwrite and write, and fread and read
Message-ID:  <200707170145.52781.wundram@beenic.net>
In-Reply-To: <469B5F61.1060805@u.washington.edu>
References:  <469B5F61.1060805@u.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On Monday 16 July 2007 14:06:57 Garrett Cooper wrote:
>     I ran some tests and I noticed a large difference in the cumulative
> sums of fwrite(2) vs write(3) and fread(2) vs read(3) (3-fold
> differences on a real machine).

This difference is at least partially explained when looking=20
at /usr/include/stdio.h, which defines the FILE structure: read/write on a=
=20
file descriptor is (pretty much) a direct syscall with operating system=20
specific semantics on a wide range of behavior, such as buffering, flushing=
=20
and seeking in read/write-opened files, whereas fread/fwrite on FILE*'s is=
=20
an "abstraction" of file access for which the stdio-API defines semantics,=
=20
such as buffering, the time flushing takes place and seeking in=20
read/write-opened files, across different flavors of POSIX-compatible libc'=
s=20
equally.

As the stdio-interface is a "wrapper" (with indirect calls calling the sysc=
all=20
read at some point in time, see the FILE-structure definition), you'll have=
=20
to expect a difference in runtime, too.

(You mixed up f{read,write}(3) and {read,write}(2), just as a sidenote, whi=
ch=20
is also indicative of the difference: man3 is indicative of a libc=20
implementation, whereas man2 generally contains syscall documentation)

=2D-=20
Heiko Wundram
Product & Application Development
=2D------------------------------------
Office Germany - EXPO PARK HANNOVER
=20
Beenic Networks GmbH
Mail=E4nder Stra=DFe 2
30539 Hannover
=20
=46on        +49 511 / 590 935 - 15
=46ax        +49 511 / 590 935 - 29
Mail       wundram@beenic.net


Beenic Networks GmbH
=2D------------------------------------
Sitz der Gesellschaft: Hannover
Gesch=E4ftsf=FChrer: Jorge Delgado
Registernummer: HRB 61869
Registergericht: Amtsgericht Hannover



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707170145.52781.wundram>