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 :

VirtualAlloc sous linux


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Par défaut VirtualAlloc sous linux
    Bonjour,
    Je débute la programmation sous linux et je voudrai savoir quel est l'équivalent sous linux de la fonction VirtualAlloc de Windows.

    Merci d'avance pour votre aide.

  2. #2
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Citation Envoyé par brutor
    Bonjour,
    Je débute la programmation sous linux et je voudrai savoir quel est l'équivalent sous linux de la fonction VirtualAlloc de Windows.

    Merci d'avance pour votre aide.

    A ma connaissance, c'est la fonction mmap()
    http://pwet.fr/man/linux/appels_systemes/mmap

  3. #3
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Par défaut
    En faite je dois porter un programme windows sous linux et le programmeur utilise la fonction VirtualAlloc pour allouer de la mémoire virtuel.
    J'ai regarder le lien que tu m'as donné, d'après ce que je comprend mmap permet de faire la projection de fichiers en mémoire et je ne sais pas vraiment ce que cela signifie, mais je pense que ce n'est pas ce que je veux faire.
    Pouvez vous éclairer ma lanterne?

  4. #4
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Citation Envoyé par brutor
    En faite je dois porter un programme windows sous linux et le programmeur utilise la fonction VirtualAlloc pour allouer de la mémoire virtuel.
    J'ai regarder le lien que tu m'as donné, d'après ce que je comprend mmap permet de faire la projection de fichiers en mémoire et je ne sais pas vraiment ce que cela signifie, mais je pense que ce n'est pas ce que je veux faire.
    Pouvez vous éclairer ma lanterne?


    Plus précisement, il est écrit « un fichier (ou un autre objet) »


    http://actes.sstic.org/SSTIC05/Vulne...es_memoire.pdf

    Extrait de la page 4 du fichier PDF :

    .../....
    L’application pourra également faire elle-même appel à mmap() – ou à VirtualAlloc() sur les systèmes Windows – pour allouer de la mémoire ou mapper le contenu d’un fichier en mémoire.
    .../...

  5. #5
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Par défaut
    Merci donc pour allouer de la mémoire virtuelle avec mmap je n'ai pas compris tous les argument.
    Par exemple sous windows:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char* mot;
    mot = VirtualAlloc(NULL, 15 , MEM_COMMIT, PAGE_READWRITE);
    sous linux :
    void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset);
    Je ne vois pas quoi mettre comme argument pour le descripteur fd , et pour l'argument offset.
    Merci de m'aider.

  6. #6
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Citation Envoyé par brutor
    Merci donc pour allouer de la mémoire virtuelle avec mmap je n'ai pas compris tous les argument.
    Par exemple sous windows:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char* mot;
    mot = VirtualAlloc(NULL, 15 , MEM_COMMIT, PAGE_READWRITE);
    sous linux :
    void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset);
    Je ne vois pas quoi mettre comme argument pour le descripteur fd , et pour l'argument offset.
    Merci de m'aider.

    Exemple de code (mmap-share.tgz) que tu pourras consulter sur le site : http://david.decotigny.free.fr/snippets/


    README
    - simple.c : partage de memoire entre 1 parent et ses fils (ie mmap
    de /dev/zero avant fork)
    - multi.c : mmap de la meme partie du meme /dev/zero = 2 zones de
    donnees differentes
    - reader.c/writer.c : partage de memoire entre 2 processus
    independants (ie mmap d'un meme fichier)


    simple.c
    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
    28
    29
    30
    31
     
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdio.h>
    #include <sys/mman.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include <unistd.h>
     
    int main () {
      void* zone_partagee;
      int fd;
     
      fd = open ("/dev/zero", O_RDWR);
      if (fd < 0) {
        perror("open");
        return -1;
      }
     
      zone_partagee = mmap((void*)0,
                           4096,
                           PROT_READ|PROT_WRITE,
                           MAP_SHARED,
                           fd, 0);
      if (zone_partagee == NULL) {
        perror("mmap");
        return -1;
      }
     
      close(fd);

Discussions similaires

  1. [Série] Accès au port série sous linux
    Par ghost dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 10/10/2007, 10h43
  2. Comment désinstaller MySQL sous linux
    Par nahmsath dans le forum Installation
    Réponses: 5
    Dernier message: 18/09/2007, 10h46
  3. installer jbuilder7 sous linux
    Par rtlinfo34 dans le forum JBuilder
    Réponses: 5
    Dernier message: 30/10/2002, 19h16
  4. Réponses: 2
    Dernier message: 25/10/2002, 22h19
  5. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57

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