Bonjour

Je suis en train de faire un petit programme avec mmap permetant de gerer des utilisateurs.
J'ai cependant un petit soucis.

J'ecris mes structures dans le fichier sans soucis. Mais je ne comprends pas pourquoi munmap() n'adapte pas la taille du fichier malgres le fait que l'argument len soit plus grand que la taille reel du fichier.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
int     main(int ac, char **av)
{
  int   fd;
  int   fsize;
  void  *file;
 
  if (-1 == (fd = open("all_users", O_CREAT | O_RDWR, 0755)))
    {
      printf("open failed\n");
      return (EXIT_FAILURE);
    }
  fsize = lseek(fd, 0, SEEK_END);
  file = mmap(NULL, fsize, PROT_READ | PROT_WRITE, MAP_FILE | MAP_PRIVATE, fd, 0);
  if (file == MAP_FAILED)
    {
      printf("mmap failed %d\n", fsize);
      return (EXIT_FAILURE);
    }
  if (ac == 3)
    fsize = add_user(av[1], av[2], file, fsize);
/*add user ecrit le header de 8octects et 10 structures de 200octects a la suite du pointeur file on optient donc une fsize de 2008*/
  printf("fsize = %d\n", fsize);
  if (-1 == munmap(file, fsize))
    printf("mmap failed\n");
  return (EXIT_SUCCESS);
}
Donc pour le moment la taille du fichier depend directement de la taille que je lui ai donne au debut(961 dans mon cas) et ne depend absolument pas de ce que j'ecris dedans grace a mmap.

Je suppose donc qu'il me manque quelquechose pour que mmap adapte lui meme la taille de mon fichier. Je pensais que c'etait le param len de munmap() mais visiblement pas.

En gros comment faire pour changer la taille d'un fichier mappe par mmap ?

Merci d'avance pour votre aide !