Linux - leer archivo con mmap()

   
Vista:

leer archivo con mmap()

Publicado por el loco (1 intervención) el 13/05/2008 07:01:16
hola a todos.
Escribo esto por qeu necesito urgentemente que me den una mano con unos programitas que estoy implementando:
Necesito leer un archivo por medio de proyeccion de archivos y que haga las siguientes tareas:
*imprimir las ultimas n lineas del archivo
*imprimir las lineas de un archivo que contengan cierta palabra
*reemplazas cierta letra minuscula por su correspondiente mayuscula

hice una lectura experimental del archivo /home/ubuntu/prueba.txt asi:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>

int main(int argc, char *argv[])
{
int archivo,*map,i;
char *Path="/home/ubuntu/prueba.txt";

archivo=open(Path,O_RDONLY);

map = (int*)mmap(0, FILESIZE, PROT_READ, MAP_SHARED, archivo, 0);

for (i = 1; i <=100; i++)
{
printf("map[%d]=%d ",i,map[i]);
}

}

pero no logro saber como diferenciar una linea de otra ni tampoco una palabra de otra (ni siquiera una letra de otra) con los contenidos de map[]. Como puedo diferenciarlos?? Esto me esta volviendo loco, les agradesco cualquier ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:leer archivo con mmap()

Publicado por n0str0m0 (1503 intervenciones) el 13/05/2008 11:04:28
Aunque ahora no puedo compilarlo y ejecutarlo creo que lo estás haciendo bien. Quizá la cadena del printf para que imprima caracteres en lugar de enteros, pero eso debería funcionar.

Básicamente lo que haces es recorrer los bytes (las palabras) en memoria.

No te olvides de liberar la memoria del mmap.

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:leer archivo con mmap()

Publicado por Tom (339 intervenciones) el 13/05/2008 12:13:45
Por curiosidad, ¿de dónde sacas FILESIZE ?

Deberías comprobar que mmap() no da error
¿ (map = mmap()) == MAP_FAILED ?

map debería ser un char *

Cada línea finaliza en un carácter ASCII LF o con el final del fichero.
Cada palabra finaliza, normalmente, con algún carácter ASCII SPACE, HT, LF ó EOF.

Todo esto si el fichero está codificado con caracteres de 1 byte. Si es un Unicode de 2 o más bytes la cosa se complica algo más.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar