IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[MMAP] Probleme d'alignement


Sujet :

Linux

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 97
    Points : 371
    Points
    371
    Par défaut [MMAP] Probleme d'alignement
    Bonjour a tous,

    je rencontre des problèmes lors de l'utilisation de MMAP sur SunOS. en effet celui-si contrairement a FreeBSD impose a l'utilisateur de préciser l'alignement, je ne vois pas comment faire, si quelqu'un a une idée, voici mon code :
    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
     
    int             rd_section(int file_desc, Elf32_Ehdr *header)
    {
      Elf32_Shdr    *section;
      void          *buffer;
      struct stat   mystat;
     
      if (fstat(file_desc, &mystat) != 0)
        return (-1);
    #if defined (__sun)
      buffer = mmap((caddr_t)0, mystat.st_size, PROT_READ, MAP_PRIVATE, file_desc,
                    header->e_shoff - (header->e_shoff%getpagesize()));
    #else
      buffer = mmap((caddr_t)0, mystat.st_size, PROT_READ, MAP_FILE, file_desc,
                    header->e_shoff);
    #endif
      if ((int)buffer == -1)
        {
          printf("errno : %d\n", errno );
          perror("mmap");
          return (-1);
        }
      section = buffer;

  2. #2
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    Par défaut
    je connais pas sunOs mais avec certains compilos pour gerer l'alignement il faut utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #pragma pack(alignement)
    ou alignement correspond a ton alignement :
    1 pour des adresse consecutives
    2 pour des multiples de 2
    4 pour des multiples de 4 etc...


    mais attention à ce que tu fais !
    __________
    "Any sufficiently advanced technology is indistinguishable from magic" Arthur C. Clarke

  3. #3
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Bonjour,

    Citation Envoyé par robertledoux Voir le message
    Bonjour a tous,

    je rencontre des problèmes lors de l'utilisation de MMAP sur SunOS. en effet celui-si contrairement a FreeBSD impose a l'utilisateur de préciser l'alignement, je ne vois pas comment faire, si quelqu'un a une idée, voici mon code :
    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
     
    int             rd_section(int file_desc, Elf32_Ehdr *header)
    {
      Elf32_Shdr    *section;
      void          *buffer;
      struct stat   mystat;
     
      if (fstat(file_desc, &mystat) != 0)
        return (-1);
    #if defined (__sun)
      buffer = mmap((caddr_t)0, mystat.st_size, PROT_READ, MAP_PRIVATE, file_desc,
                    header->e_shoff - (header->e_shoff%getpagesize()));
    #else
      buffer = mmap((caddr_t)0, mystat.st_size, PROT_READ, MAP_FILE, file_desc,
                    header->e_shoff);
    #endif
      if ((int)buffer == -1)
        {
          printf("errno : %d\n", errno );
          perror("mmap");
          return (-1);
        }
      section = buffer;
    Tu peux récupérer la taille d'une page avec sysconf() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
     
    #include <unistd.h>
     
    int
    main (void)
    { 
      printf("%ld\n", sysconf(_SC_PAGE_SIZE));
     
      return 0;
    }
    Il vaut mieux toujours aligner le dernier paramètre, c'est ce qui est requis par la norme.
    :wq

Discussions similaires

  1. Probleme avec alignement de chiffres réels :(
    Par softstar dans le forum Delphi
    Réponses: 52
    Dernier message: 09/09/2006, 00h12
  2. probleme d'alignement d'un caption
    Par softstar dans le forum Delphi
    Réponses: 6
    Dernier message: 27/08/2006, 10h36
  3. [Tableaux] Probleme d'alignement des checkboxs
    Par grumly22 dans le forum Langage
    Réponses: 8
    Dernier message: 20/06/2006, 14h38
  4. probleme d'alignement vertical
    Par mangamat dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 15/02/2005, 22h46
  5. Probleme d'alignement.
    Par roots_man dans le forum ASP
    Réponses: 4
    Dernier message: 30/09/2004, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo