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.
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.
Envoyé par brutor
A ma connaissance, c'est la fonction mmap()
http://pwet.fr/man/linux/appels_systemes/mmap
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?
Envoyé par brutor
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.
.../...
Merci donc pour allouer de la mémoire virtuelle avec mmap je n'ai pas compris tous les argument.
Par exemple sous windows:
sous linux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char* mot; mot = VirtualAlloc(NULL, 15 , MEM_COMMIT, PAGE_READWRITE);
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.
Envoyé par brutor
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);
Partager