Funcion mmap() y posix_advise

Dudas sobre los distintos compiladores C/C++ en Linux
Responder
Mensaje
Autor
pichu27
Mensajes: 6
Registrado: 16/09/2011 3:34 pm

Funcion mmap() y posix_advise

#1 Mensaje por pichu27 » 18/09/2011 3:49 pm

Hola, que tal?
Tengo esta duda, porque necesito abrir un archivo disco ( fat32.disk ) y leer y escribir sus sectores.
Para dicha tarea, me aconsejaron la tarea de mmap() y posix_madvise la cual requiere que implemente antes la primera.
Se que el tamaño de mis paginas es de 4kb ya que lo obtuve con la funcion getpagesize(), ahora con respecto a la funcion mmap() encontre esto:
void *mmap (void *start, size_t length, int prot, int flags, int fd, off_t offset);
donde el primer parametro es el comienzo donde voy a mapear las paginas, el tercero los permisos, el cuarto el tipo de acceso, y el quinto mi archivo que voy a abrir.
ahora mi pregunta es.
1) el argumento size_t length es el tamaño de pagina de memoria o el tamaño de mi archivo o ninguna de las dos?
2) el argumento off_Set se que tiene que ser multiplo del tamaño que ocupan mis paginas de memoria (4kb) pero para que sirve??

Una vez hecho esto, como puedo leer los bytes de esas paginas de memoria que mapeo con la funcion mmap() ?? Requiero utilizar la funcion posix_madvise ?'??

Desde ya muchas gracias al que me ayude, estoy haciendo un trabajo de la facultad bastante complejo para mi, y necesito de su ayuda!!

Avatar de Usuario
Sorancio
Mensajes: 1157
Registrado: 29/05/2009 12:42 pm
Ubicación: España
Contactar:

#2 Mensaje por Sorancio » 19/09/2011 4:57 am

mmap es una función que "mapea" un fichero en memoria para que puedas acceder mediante las operaciones típicas de manipulación de memoria al fichero.

Si vas a trabajar sobre POSIX y demás estándares, te recomiendo tener esta página: (link directo a mmap) http://pubs.opengroup.org/onlinepubs/00 ... /mmap.html

Es fantástica y da una de información escalofriante. Básicamente toda.

length: Es el tamaño a mappear, no de la página.
offset: Es, efectivamente, éste del fichero. Por ejemplo, empezar un fichero en el offset X ya que los Y primeros bytes son una cabecera de definición.

La verdad, la función posix_madvise no sé para qué sirve. Pero otra vez: http://pubs.opengroup.org/onlinepubs/00 ... dvise.html

¡Suerte!

pichu27
Mensajes: 6
Registrado: 16/09/2011 3:34 pm

#3 Mensaje por pichu27 » 19/09/2011 9:30 am

La habia encontrado esa pagina pero como esta toda en ingles muy bien no entendi todo lo que decia.
Entonces.. si tengo un archivo de 512 mb y quiero leer los primeros 512 bytes como deberia implementar la funcion mmap() ??

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado