/* Fonction auxiliaire référençant le fichier en mémoire*/ void* map_file(char* file, long* fsize) { int fd; /* Descripteur du fichier */ void* ptr; /* Début de la zone */ struct stat st; /* Attributs du fichier référencé */ /* Ouverture et récupération des attributs du fichier */ if ((stat(file, &st) != 0) || (fd = open(file, O_RDWR)) < 0) { perror("open"); return NULL; } /* Vérification que le fichier n'est pas vide */ if (st.st_size == 0) { (void) printf("%s: is empty\n", file); (void) close(fd); return NULL; } /* Récupération de la taille du fichier */ *fsize = st.st_size; /* Référencement du fichier en mémoire. On ajoute un octet à la taille du fichier pour pouvoir éventuellement ajouter le caractère '\0' en fin de fichier */ ptr = mmap(NULL, st.st_size+1, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0); (void) close(fd); if (ptr == MAP_FAILED) { (void) printf("%s: cannot be map\n", file); return NULL; } return ptr; } |