Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. mmap — Wikipédia
mmap — Wikipédia 👆 Click Here! Read More..
Un article de Wikipédia, l'encyclopédie libre.

mmap (« memory map ») est un appel système UNIX (norme POSIX[1]). Il établit une projection en mémoire des fichiers ou périphériques.

mmap est parfois utilisé pour la communication inter-processus. Pour cette fonctionnalité, il existe aussi l'appel système shmem. La différence entre les deux est que pour mmap, les données en mémoire ne sont pas persistantes.

Certains systèmes supportent une version étendue de mmap, qui permet d'allouer de la mémoire virtuelle sans la lier à un fichier. mmap est donc utilisé pour l'allocation de mémoire.

Paramètres

[modifier | modifier le code]

La fonction prend six arguments[2] :

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
  1. Adresse de départ en mémoire virtuelle.
  2. Taille de la projection.
  3. Protection (PROT_EXEC, PROT_READ, PROT_WRITE, PROT_NONE).
  4. Drapeau (MAP_SHARED, MAP_PRIVATE, MAP_POPULATE...).
  5. Descripteur de fichier.
  6. Position dans ce fichier.

Exemple

[modifier | modifier le code]
#include <sys/types.h>
#include <sys/mman.h>
#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
        const char str1[] = "string 1";
        const char str2[] = "string 2";
        int parpid = getpid(), childpid;
        int fd = -1;
        char *anon, *zero;

        if ((fd = open("/dev/zero", O_RDWR, 0)) == -1)
                err(1, "open");

        anon = (char*)mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0);
        zero = (char*)mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, 0);

        if (anon == MAP_FAILED || zero == MAP_FAILED)
                errx(1, "either mmap");

        strcpy(anon, str1);
        strcpy(zero, str1);

        printf("PID %d:\tanonymous %s, zero-backed %s\n", parpid, anon, zero);
        switch ((childpid = fork())) {
        case -1:
                err(1, "fork");
                /* NOTREACHED */

        case 0:
                childpid = getpid();
                printf("PID %d:\tanonymous %s, zero-backed %s\n", childpid, anon, zero);
                sleep(3);

                printf("PID %d:\tanonymous %s, zero-backed %s\n", childpid, anon, zero);
                munmap(anon, 4096);
                munmap(zero, 4096);
                close(fd);
                return (EXIT_SUCCESS);
        }

        sleep(2);
        strcpy(anon, str2);
        strcpy(zero, str2);

        printf("PID %d:\tanonymous %s, zero-backed %s\n", parpid, anon, zero);
        munmap(anon, 4096);
        munmap(zero, 4096);
        close(fd);
        return (EXIT_SUCCESS);
}

Notes et références

[modifier | modifier le code]
  1. ↑ (en) « POSIX Interface Library: liboskit_posix.a »
  2. ↑ « MMAP », sur manpagesfr.free.fr (consulté le 27 mai 2023).

Voir aussi

[modifier | modifier le code]

Articles connexes

[modifier | modifier le code]
  • malloc : allocation de mémoire

Liens externes

[modifier | modifier le code]
  • Le manuel de l'appel système "mmap"
v · m
Programme informatique
Compilation
  • Analyse lexicale
  • Analyse syntaxique
  • Assemblage
  • Fichier objet
  • Code source
  • Compilateur
  • Décompilateur
  • Édition de liens
  • Identificateur
  • Moteur de production
  • Précompilateur
  • Préprocesseur
Exécution
  • Configuration
  • Interprète
  • Machine virtuelle
  • Offset
  • Portabilité
  • Processus
  • Point d'arrêt
  • Thread
  • Segmentation
Bug
  • Débogueur
  • Dépassement d'entier
  • Soupassement arithmétique
  • Dépassement de pile
  • Dépassement de tampon
  • Dépassement de tas
  • Effet de bord
  • Erreur de segmentation
  • Exception
  • Fuite de mémoire
  • Plantage
  • Test
  • Catégorie
    • Compilateur
    • Bug
v · m
Communication inter-processus
Méthodes
  • Fichier
  • Mmap
  • Passage de messages
    • File d'attente
  • Tube
    • Nommé
    • Anonyme
  • Substitution de processus
  • Sémaphore
  • Mémoire partagée
  • Signaux
  • Sockets
    • INET
    • UNIX
Protocoles
  • Apache Thrift
  • Apple events
  • COM+
  • CORBA
  • D-Bus
  • DCE
  • ICE
  • ONC RPC
  • POSIX (différentes méthodes)
  • Protocol Buffers
  • SOAP
  • REST
  • TIPC
  • XML-RPC
  • icône décorative Portail de l’informatique
  • icône décorative Portail de la programmation informatique
Ce document provient de « https://fr.teknopedia.teknokrat.ac.id/w/index.php?title=Mmap&oldid=204648218 ».
Catégories :
  • Logiciel système
  • POSIX
Catégories cachées :
  • Portail:Informatique/Articles liés
  • Portail:Technologies/Articles liés
  • Portail:Programmation informatique/Articles liés

  • indonesia
  • Polski
  • الرية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصر
  • Nederlands
  • 本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українска
  • Tiếng Việt
  • Winaray
  • 中文
  • Русски
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id