Charli, recordà que el S.O. tambien aplica optimizaciones en las lecturas y
accesos a disco haciendo uso de cache... El S.O. optimiza el acceso a disco
leyendo de a bloques grandes de bytes y los mantiene chacheados, asi que
quien sabe si realizas varias lecturas consecutivas de datos desde disco el
S.O. termine haciendo un solo seek porque leyo en una sola lectura un bloque
grande y lo cacheo en un buffer interno para optimizarlo...

Saludos
Pablo

2009/4/8 Carlos Charlie <[email protected]>

>  o sea que:
>
> FILE* stream = fopen("file.dat", "r");
> char buffer[20];
> fread(buffer, sizeof(char), 20, stream)
>
>
> Es lo mismo en terminos de accesos a disco que:
>
> FILE* stream = fopen("file.dat", "r");
> char buffer[20];
> for (int i=0; i<20; i++) fread(buffer++, sizeof(char), 1, stream);
>
> ?????????????????????
>
> O sea, suponiendo que 20 es menor al tamaño del buffer interno, estos dos
> algoritmos tienen un unico acceso a disco? No vale la pena que implemente mi
> propio buffer?
>
>
> > Date: Wed, 8 Apr 2009 01:15:44 -0300
> > Subject: Re: [Prog] stdio vs fstream
> > From: [email protected]
> > To: [email protected]
> >
> > 2009/4/8 Carlos Charlie <[email protected]>
> > >
> > > Las funciones de stdio utilizan algun buffer interno? se puede
> parametrizar su tamaño?
> > >
> >
> > Pegate un vuelta por la documentación de POSIX[1] en relación con la
> > biblioteca estándar de C.
> >
> > En resumen, lo que dice:
> >
> > >
> > > stdio.h - standard buffered input/output
> > >
> > Así que, sí utiliza "buffers".
> >
> > >
> > > The <stdio.h> header shall define the following macros as positive
> integer constant
> > > expressions:
> > >
> > > BUFSIZ
> > > Size of <stdio.h> buffers.
> > > _IOFBF
> > > Input/output fully buffered.
> > > _IOLBF
> > > Input/output line buffered.
> > > _IONBF
> > > Input/output unbuffered.
> >
> > Sí, está parametrizado. El tamaño por defecto es la primer constante.
> > Las otras son el modo en que opera el "buffer" y se utilizan junto a
> > la función
> >
> > >
> > > setvbuf - assign buffering to a stream
> > >
> > > int setvbuf(FILE *restrict stream, char *restrict buf, int type,
> > > size_t size);
> > >
> >
> > que permite establecer el bloque de memoria utilizado para realizar el
> > "buffering" y su tamaño y modo de operación.
> >
> > Saludos
> >
> > [1] http://www.opengroup.org/onlinepubs/009695399/basedefs/stdio.h.html
> >
> > _______________________________________________
> > Lista de correo Programacion.
> > [email protected]
> > http://listas.fi.uba.ar/mailman/listinfo/programacion
>
> ------------------------------
> El nuevo Messenger es más personalizable que nunca ¡Conocelo y conseguí el
> tuyo! <http://www.nuevomessenger2009.com/>
>
> _______________________________________________
> Lista de correo Programacion.
> [email protected]
> http://listas.fi.uba.ar/mailman/listinfo/programacion
>
>


-- 
Si yo tengo una manzana y tú tienes una manzana, luego de intercambiarlas
ambos tenemos una manzana. Si yo tengo una idea y tú tienes una idea, luego
de intercambiarlas ambos tenemos dos ideas.

Apoyando a la comunidad Open Source.

Facebook prifile:
http://www.facebook.com/profile.php?id=1244601012
Orkut prifile:
http://www.orkut.com/Profile.aspx?uid=12594853021246287134
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a