viernes, 5 de marzo de 2010

mmap

Ubica, elimina ficheros ó dispositivos en memoria.
Proyecta el contenido de un archivo en memoria.

Sintaxis
#include
#include

void *mmap (void *start, size_t length, int prot, int flags, int fd, off_t offset);

start
Dirección para alojar la proyección. Si NULL el sistema elige.

length
Cantidad del fichero a mapear.

prot
Describe la protección de memoria deseada:
PROT_EXEC = Se permite ejecución
PROT_READ = Se permite leer.
PROT_WRITE = Se permite escribir.
PROT_NONE = Las páginas no pueden ser accedidas.
Nota: Estas opciones se pueden combinar separándolas por “|”.

flags
Modificadores de acceso:
MAP_FIXED No seleccionar una dirección diferente a la especificada. Si la dirección especificada no puede ser utilizada, mmap fallará.
MAP_SHARED Comparte este área con todos los otros procesos que señalan a este objeto.
MAP_PRIVATE Crear un área privada "copy-on-write".
MAP_ANON, MAPDENY_WRITE, MAP_LOCKED.

fd
Descriptor del fichero a usar. Previamente debe haber sido abierto.
offset
Desplazamiento del comienzo del mapeo en el archivo.

/*Ejemplo de programa de usuario*/
void main()
{
/*...*/
/*Obtener nombre y tamaño del archivo y abrirlo*/
/*Proyección del archivo en memoria*/

addr= (char *) mmap(NULL, Size, PROT_READ, MAP_SHARED, fd, (off_t) 0);

/*Cierre del archivo*/
/*Visualización del contenido del archivo*/
for (int i = 0; i putchar(addr[i]);
/*Liberación del archivo*/
flag=munmap (addr, Size);
/*...*/
}

No hay comentarios:

Publicar un comentario