DosAllocSharedMem |
DOS : Alloue de la mémoire partagé |
---|---|
DOSCALLS.DLL | os2.h |
Syntaxe
APIRET DosAllocSharedMem( PPVOID pBaseAddress, PSZ pszName, ULONG ulObjectSize, ULONG ulFlags ); |
Paramètres
Nom | Description | ||
---|---|---|---|
pBaseAddress | Ce paramètre permet d'indiquer un pointeur vers une variable recevant l'adresse de base d'un objet d'allocation de mémoire partagé. | ||
pszName | Ce paramètre optionnel permet d'indiquer la chaîne de caractères d'un nom associé avec le bloc de mémoire partagé. | ||
ulObjectSize | Ce paramètre permet d'indiquer la taille du bloc de mémoire à allouer. | ||
ulFlags | Ce paramètre permet d'indiquer les drapeaux de description d'allocation d'attribut pour l'accès protégé d'un bloc de mémoire partagé. Voici les valeurs pouvant être combiné : | ||
Constante | Valeur | Description | |
PAG_READ | 0x00000001 | Cette valeur permet d'indiquer qu'il faut autorisé un accès en lecture au pages de bloc de mémoire. | |
PAG_WRITE | 0x00000002 | Cette valeur permet d'indiquer qu'il faut autorisé un accès l'écriture au pages de bloc de mémoire. | |
PAG_EXECUTE | 0x00000004 | Cette valeur permet d'indiquer qu'il faut autorisé un accès d'exécution au pages de bloc de mémoire. | |
PAG_GUARD | 0x00000008 | Cette valeur permet d'indiquer qu'il faut autorisé un accès système au pages de bloc de mémoire afin qu'un gardien de processus d'exception puisse y accéder. | |
PAG_COMMIT | 0x00000010 | Cette valeur permet d'indiquer que tous les bloc de mémoire privé sont initialisés. | |
OBJ_TILE | 0x00000040 | Cette valeur permet de forcer l'allocation d'un bloc de mémoire dans les 512 premier mégaoctets de l'espace d'adressage virtuel. | |
OBJ_GETTABLE | 0x00000100 | Cette valeur permet que l'objet de mémoire peut être accessible par les autres projets. | |
OBJ_GIVEABLE | 0x00000200 | Cette valeur permet que l'objet de mémoire peut être fournir l'accès pour autre projet, en utilisant DosGiveSharedMem. |
Retour
Valeur | Constante | Description |
---|---|---|
0 | NO_ERROR | Cette valeur permet d'indiquer que l'opération s'est correctement effectué |
8 | ERROR_NOT_ENOUGH_MEMORY | Cette valeur permet d'indiquer que la limite de mémoire système est atteinte. |
87 | ERROR_INVALID_PARAMETER | Cette valeur permet d'indiquer qu'un ou plusieurs des paramètres contient une valeur illégale. |
95 | ERROR_INTERRUPT | Cette valeur permet d'indiquer qu'une erreur d'interruption s'est produite. |
123 | ERROR_INVALID_NAME | Cette valeur permet d'indiquer qu'une erreur de nom invalide s'est produite. |
183 | ERROR_ALREADY_EXISTS | Cette valeur permet d'indiquer qu'une erreur de nom déjà existante s'est produite. |
Description
Cette fonction permet d'utiliser l'allocation d'objet de mémoire partagé dans les limites d'espaces d'adressage virtuel.
Remarques
- La fonction DosAllocSharedMem est utilisé pour allouer un objet de mémoire partagée, dans l'espace d'adressage virtuel. Lorsque le bloc de mémoire partagée alloué reçoit un nom, il peut être partagé avec d'autres processus. Ces autres processus utilisent DosGetNamedSharedMem pour accéder au bloc de mémoire. Notez que cette situation nécessite qu'ils connaissent le nom du bloc de mémoire partagée.
- Si vous ne spécifiez pas de nom, ce sera un bloc de mémoire partagée sans nom. Un bloc de mémoire sans nom peut être partagé avec tous les autres processus ayant accès à l'aide des fonctions DosGetSharedMem ou DosGiveSharedMem.
- Comme avec la fonction DosAllocMem, l'objet de mémoire partagée alloué est arrondi à un multiple de la taille de la page. La taille de la page sur la plupart des systèmes sera de 4 Ko, car il s'agit de la valeur par défaut.
- La constante OBJ_TILE est utilisé pour la compatibilité avec la mise en oeuvre 16 bits existante d'OS/2. L'utilisation de cet indicateur oblige la mémoire partagée à être allouée dans les premiers 512 Mo de l'espace d'adresse virtuelle.
Exemple
Voici un simple exemple montrant comme appeler cette API avec WatCom C++ for OS/2 :
- #define INCL_DOSERRORS
- #define INCL_DOSMEMMGR
- #include "os2.h"
- #include "stdio.h"
-
- void main(void) {
- PVOID BaseAddress;
- switch(DosAllocSharedMem( &BaseAddress, "\\SHAREMEM\\BLOCK.DAT", 16384, PAG_WRITE | PAG_READ | PAG_COMMIT)) {
- case NO_ERROR: printf("Tout va bien !");break;
- case ERROR_NOT_ENOUGH_MEMORY: printf("Erreur : La limite de mémoire système est atteinte.");break;
- case ERROR_INVALID_PARAMETER: printf("Erreur : Un ou plusieurs des paramètres contient une valeur illégale.");break;
- case ERROR_INTERRUPT: printf("Erreur : Une erreur d'interruption s'est produite.");break;
- case ERROR_INVALID_NAME: printf("Erreur : Une erreur de nom invalide s'est produite.");break;
- case ERROR_ALREADY_EXISTS: printf("Erreur : Une erreur de nom déjà existante s'est produite.");break;
- }
- }
Voir également
Langage de programmation - C pour OS/2 - DosAllocMem
Langage de programmation - C pour OS/2 - DosFreeMem
Langage de programmation - C pour OS/2 - DosGetNamedSharedMem
Langage de programmation - C pour OS/2 - DosGetSharedMem
Langage de programmation - C pour OS/2 - DosGiveSharedMem
Système d'exploitation - OS/2 - Introduction
Dernière mise à jour : Lundi, le 19 juillet 2010