| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
pichu27
Registrado: 16 Sep 2011 Mensajes: 6
| Publicado: 18/09/2011 3:49 pm | | | Título: Funcion mmap() y posix_advise |
| 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!! |
| | Volver arriba | |  | Sorancio

Registrado: 29 May 2009 Mensajes: 1157 Ubicación: España
| Publicado: 19/09/2011 4:57 am | | | Título: |
| 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/009695399/functions/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/009695399/functions/posix_madvise.html
¡Suerte! |
| | Volver arriba | |  | pichu27
Registrado: 16 Sep 2011 Mensajes: 6
| Publicado: 19/09/2011 9:30 am | | | Título: |
| 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() ?? |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |