SHMCTL(2) | Manual del programador de Linux | SHMCTL(2) |
shmctl - control de memoria compartida
#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
shmctl() permite al usuario recibir información sobre un segmento de memoria compartida, establecer el dueño, grupo y permisos del segmento, así como destruirlo. La información sobre el segmento identificado como shmid se devuelve en una estructura shmid_ds:
struct shmid_ds {
struct ipc_perm shm_perm; /* permisos de operación */
int shm_segsz; /* tamaño del segmento (bytes) */
time_t shm_atime; /* tiempo de la última unión */
time_t shm_dtime; /* tiempo de la última separación */
time_t shm_ctime; /* tiempo de la última modificación */
unsigned short shm_cpid; /* pid del creador */
unsigned short shm_lpid; /* pid of último operador */
short shm_nattch; /* nº. de uniones actuales */
... };
Los campos resaltados del miembro shm_perm pueden ser modificados:
struct ipc_perm {
key_t key;
ushort uid; /* euid y egid del propietario */
ushort gid;
ushort cuid; /* euid y egid del creador */
ushort cgid;
ushort mode; /* 9 bits más bajos de los modos de acceso */
ushort seq; /* número de secuencia */ };
Están disponibles los siguientes cmds:
El usuario debe asegurarse de que el segmento se destruye al final; de lo contrario, las páginas de dicho segmento que se cargaron en memoria al producir un fallo de página, permanecerán en memoria o en el fichero de intercambio.
Además, el superusuario puede impedir o permitir que
un segmento de memoria compartida pase al fichero de intercambio con las
siguientes órdenes (sólo Linux):
Las llamadas de control IPC_INFO, SHM_STAT y SHM_INFO son usadas por el programa ipcs(8) para proporcionar información sobre los recursos asignados. En el futuro, éstos pueden ser modificados según se necesite o movidos a un sistema de ficheros proc.
En caso de éxito se devuelve 0, en caso de error -1.
En caso de error, errno tomará uno de los siguientes valores:
Algunos campos de la estructura shmid_ds eran de tipo short bajo Linux 2.2 y se han convertido a long en Linux 2.4. Para aprovecharse de ésto, debería bastar una recompilación bajo glibc-2.1.91 o alguna versión posterior. (El núcleo distingue las llamadas antiguas y nuevas por una bandera IPC_64 en cmd.)
SVr4, SVID. SVr4 documenta las condiciones de error adicionales EINVAL, ENOENT, ENOSPC, ENOMEM, EEXIST. Ni SVr4 ni SVID documentan una condición de error EIDRM.
5 enero 2002 | Linux 2.4.1 |