DosAllocMem reserva y asigna un bloque de memoria privada en el espacio de direcciones de la aplicación.
#define INCL_BASE
#include <os2.h>
PPVOID pBaseAddress;
ULONG ulObjectSize;
ULONG ulAllocationFlags;
APIRET rc; /* Codigo de error */
rc = DosAllocMem(pBaseAddress, ulObjectSize, ulAllocationFlags);
Parámetros |
|
---|---|
pBaseAddress | Un puntero a una variable donde OS/2 devolverá un puntero a la dirección base del bloque de memoria asignado. |
ulObjectSize | Un valor especificando el tamaño deseado (en bytes) del bloque de memoria. Este será redondeado por OS/2 al siguiente multiplo entero de páginas (de 4 kilobytes cada una). |
ulAllocationFlags | Un conjunto de flags que describen los atributos del bloque de memoria, así como los modos de acceso. |
Atributos de posición
Atributos de protección
|
Codigos de error |
|
---|---|
0 | Sin error |
8 | No hay suficiente memoria |
87 | Parámetro no valido |
95 | Interrupción |
DosAllocSharedMem reserva y asigna un bloque de memoria compartida, que puede ser leido por varios procesos distintos.
#define INCL_BASE
#include <os2.h>
PPVOID pBaseAddress;
PSZ pszName;
ULONG ulObjectSize;
ULONG ulFlags;
APIRET rc; /* Codigo de error */
rc = DosAllocSharedMem(pBaseAddress, pszName, ulObjectSize, ulFlags);
Parámetros |
|
---|---|
pBaseAddress | Un puntero a una variable donde OS/2 devolverá un puntero a la dirección base del bloque de memoria asignado. |
pszName | Un puntero opcional a una cadena asociada al bloque compartido. El nombre es una cadena ASCIIZ, en el formato de nombre de fichero de OS/2, en el directorio \SHAREMEM\; por ejemplo, \SHAREMEM\PUBLICO.DAT. Si no se indica ningún nombre (pszName=NULL), el bloque puede ser declarado giveable o getable para su compartición a traves de las funciones DosGetSharedMem o DosGiveSharedMem. |
ulObjectSize | Un valor especificando el tamaño deseado (en bytes) del bloque de memoria. Este será redondeado por OS/2 al siguiente multiplo entero de páginas (de 4 kilobytes cada una). |
ulAllocationFlags | Un conjunto de flags que describen los atributos del bloque de memoria, así como los modos de acceso. |
Atributos de posición
Atributos de protección
|
Codigos de error |
|
---|---|
0 | Sin error |
8 | No hay suficiente memoria |
87 | Parámetro no valido |
95 | Interrupción |
123 | Nombre no válido |
183 | Ya existe |
DosFreeMem libera un bloque de memoria reservado por DosAllocMem o DosAllocSharedMem. En éste último caso, se decrementa el contador de accesos al bloque. Cuando éste ha llegado a cero, es que todos los procesos han liberado el bloque, momento en que la eliminación fisica se hace efectiva.
#define INCL_BASE
#include <os2.h>
PVOID pBaseAddress;
APIRET rc; /* Codigo de error */
rc = DosFreeMem(pBaseAddress);
Parámetros |
|
---|---|
pBaseAddress | La dirección base del bloque de memoria a liberar, obtenida con DosAllocMem o con DosAllocSharedMem. |
Codigos de error |
|
---|---|
0 | Sin error |
5 | Acceso denegado |
95 | Interrupción |
487 | Dirección no válida |
DosGetNamedSharedMem da acceso a un bloque de memoria compartido creado por otro proceso. Se usa sólo con bloques que tienen nombre.
#define INCL_BASE
#include <os2.h>
PPVOID pBaseAddress;
PSZ pszSharedMemName;
ULONG ulAttributeFlags;
APIRET rc; /* Codigo de error */
rc = DosGetNamedSharedMem(pBaseAddress, pszSharedMemName, ulAttributeFlags);
Parámetros |
|
---|---|
pBaseAddress | Puntero a una dirección donde OS/2 almacenará un puntero al inicio del bloque de memoria compartido. |
pszSharedMemName | Un puntero a una cadena ASCIIZ conteniendo el nombre del bloque de memoria que el otro proceso usó al crearlo. Debe incluir el nombre \SHAREMEM\ antes. Por ejemplo, \SHAREMEM\PUBLICO.DAT. |
ulAllocationFlags | Un conjunto de flags que describen los modos de acceso al bloque de memoria. |
Atributos de protección
|
Codigos de error |
|
---|---|
0 | Sin error |
2 | Fichero no encontrado |
8 | No hay suficiente memoria |
87 | Parámetro no valido |
95 | Interrupción |
123 | Nombre no válido |
212 | Bloqueado |
DosGetSharedMem da acceso a un bloque de memoria compartido creado por otro proceso. Es necesario conocer el puntero base de dicho bloque de memoria, el cual puede ser obtenido a través de sistemas de comunicación interproceso.
#define INCL_BASE
#include <os2.h>
PVOID pBaseAddress;
ULONG ulAttributeFlags;
APIRET rc; /* Codigo de error */
rc = DosGetSharedMem(pBaseAddress, ulAttributeFlags);
Parámetros |
|
---|---|
pBaseAddress | Puntero al inicio del bloque de memoria compartido al que se quiere obtener acceso. Este puntero puede ser obtenido a través de los sistemas de comunicación interproceso.Además, dicho bloque debe ser gettable (esto es, haber sido creado con el atributo OBJ_GETTABLE). |
ulAllocationFlags | Un conjunto de flags que describen los modos de acceso al bloque de memoria. |
Atributos de protección
|
Codigos de error |
|
---|---|
0 | Sin error |
5 | Acceso denegado |
8 | No hay suficiente memoria |
87 | Parámetro no valido |
95 | Interrupción |
212 | Bloqueado |
DosGiveSharedMem da acceso a un bloque de memoria compartido del proceso actual a otro proceso. Es similar a DosGetSharedMem, y también es necesario que los procesos intercambien el puntero al inicio del bloque por medio de los sistemas de comunicación interproceso.
#define INCL_BASE
#include <os2.h>
PVOID pBaseAddress;
PID idProccessID;
ULONG ulAttributeFlags;
APIRET rc; /* Codigo de error */
rc = DosGiveSharedMem(pBaseAddress, idProccessID, ulAttributeFlags);
Parámetros |
|
---|---|
pBaseAddress | Puntero al inicio del bloque de memoria compartido al que se quiere dar acceso a otro proceso, tal y como lo devuelve DosAllocSharedMem. Además, dicho bloque debe ser giveable (esto es, haber sido creado con el atributo OBJ_GIVEABLE). |
idProcessID | El identificador (PID) del proceso que recibirá acceso al bloque de memoria. |
ulAllocationFlags | Un conjunto de flags que describen los modos de acceso al bloque de memoria. |
Atributos de protección
|
Codigos de error |
|
---|---|
0 | Sin error |
5 | Acceso denegado |
8 | No hay suficiente memoria |
87 | Parámetro no valido |
95 | Interrupción |
212 | Bloqueado |
303 | PID no válido |
487 | Dirección no válida |
DosSubAllocMem asigna un subbloque de memoria en un bloque previamente inicializado por DosSubSetMem.
#define INCL_BASE
#include <os2.h>
PVOID pOffset;
PPVOID pBlockOffset;
ULONG ulSize;
APIRET rc; /* Codigo de error */
rc = DosSubAllocMem(pOffset, pBlockOffset, ulSize);
Parámetros |
|
---|---|
pOffset | Puntero al bloque de memoria en donde se va a asignar el subbloque. |
pBlockOffset | Puntero a una zona de memoria donde OS/2 devolverá un puntero al inicio del subbloque. |
ulSize | Tamaño en bytes del subbloque que se quiere crear. Este valor será redondeado al múltiplo superior de 8 más cercano. El tamaño máximo es el del bloque inicializado con DosSubSetMem menos 64 bytes. |
Codigos de error |
|
---|---|
0 | Sin error |
87 | Parámetro no válido |
311 | No hay suficiente memoria libre |
532 | DosSub corrupto |
DosSubFreeMem libera un subbloque de memoria previamente asignado con DosSubAllocMem.
#define INCL_BASE
#include <os2.h>
PVOID pOffset;
PVOID pBlockOffset;
ULONG ulSize;
APIRET rc; /* Codigo de error */
rc = DosSubFreeMem(pOffset, pBlockOffset, ulSize);
Parámetros |
|
---|---|
pOffset | Puntero al bloque de memoria en donde se encuentra el subbloque a liberar. |
pBlockOffset | El puntero del subbloque a liberar. Tiene que ser un valor entregado por DosSubAllocMem. |
ulSize | Tamaño en bytes del subbloque a liberar. Este valor será redondeado al múltiplo superior de 8 más cercano. El tamaño máximo es el del bloque inicializado con DosSubSetMem menos 64 bytes. |
Codigos de error |
|
---|---|
0 | Sin error |
87 | Parámetro no válido |
312 | Superposición no válida en el bloque |
532 | DosSub corrupto |
DosSubSetMem inicializa un bloque de memoria para subasignación, o incrementa el tamaño de un bloque previamente inicializado.
#define INCL_BASE
#include <os2.h>
PVOID pOffset;
ULONG ulFlags;
ULONG ulSize;
APIRET rc; /* Codigo de error */
rc = DosSubSetMem(pOffset, ulFlags, ulSize);
Parámetros |
|||||||||
---|---|---|---|---|---|---|---|---|---|
pOffset | Puntero al bloque de memoria que se quiere usar para subasignación. | ||||||||
ulFlags | Flags que describen las características del bloque de memoria que será subasignado. | ||||||||
| |||||||||
ulSize | El tamaño en bytes del subbloque que se reservará para subasignación. Si no es un multiplo de 8 bytes, se redondeará por debajo a un múltiplo. |
Codigos de error |
|
---|---|
0 | Sin error |
87 | Parámetro no válido |
310 | No se puede reducir un segmento subasignado |
DosSubUnsetMem libera un bloque de memoria destinado a subasignación. Es necesario hacerlo antes de liberar el bloque físico con DosFreeMem.
#define INCL_BASE
#include <os2.h>
PVOID pOffset;
APIRET rc; /* Codigo de error */
rc = DosSubUnsetMem(pOffset);
Parámetros |
|
---|---|
pOffset | Un puntero al bloque de memoria que se quiere liberar. |
Codigos de error |
|
---|---|
0 | Sin error |
532 | DosSub corrupto |