[eside-ghost] Lectura/escritura eficiente de ficheros en C

Borja Sotomayor borja en borjanet.com
Jue Ene 26 22:03:14 CET 2006


Hola a todos,

Bueno, esta es una pregunta de C, pero a demasiado bajo nivel para 
enviarla a las listas de C de ESIDE (aparte de que me interesa saber la 
opinión de los low-level jeinkers ;-)

En la asignatura de programación que imparto aquí en Chicago vamos a 
pedirles a los alumnos que reimplementen algún comando estandar de UNIX 
que manipule ficheros (cat o cp, por ejemplo). Como "solución base", 
vamos a aceptar que hagan la lectura/escritura de ficheros con funciones 
como fprintf/fscanf, pero daremos puntos extra a quien encuentre una 
solución más eficiente.

Lo que pasa es que tampoco tenemos muy claro cómo sería esa solución 
"más eficiente" ;-) Por lo que tengo entendido (y corregidme si me 
equivoco), utilizar fprintf/fscanf para manipular ficheros muy grandes 
puede ser poco eficiente, y hay llamadas a más bajo nivel para mapear 
los ficheros directamente a memoria y luego transferir datos entre 
ficheros utilizando memcpy, no? A bote pronto, diria que hay que hacerlo 
con mmap y munmap, pero igual esa no es la mejor manera de hacerlo. Me 
imagino que otra alternativa sería utilizando read()/write() a pelo con 
un tamaño de buffer óptimo.

En fin, si alguien puede proporcionarme alguna pista (o enlaces a 
documentos que traten sobre este tema), pues lo agradecería :-)

Un saludo,
-- 
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Borja Sotomayor, University of Chicago
  Ph.D. Student, Department of Computer Science
  Hinds 016, 5734 South Ellis Avenue, 60637 Chicago, IL
GT4 Tutorial: http://gdp.globus.org/gt4-tutorial/
BorjaNet:  http://www.borjanet.com/   borja en borjanet.com
·····························································
          "Dis maschine vill run und run!"
                -- Kurt Gödel (on the Turing Machine)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::



Más información sobre la lista de distribución eside-ghost