Provided by:
manpages-es_1.55-10_all 
NOMBRE
shmctl - control de memoria compartida
SINOPSIS
#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
DESCRIPCI'ON
shmctl() permite al usuario recibir informacion sobre un segmento de
memoria compartida, establecer el dueno, grupo y permisos del segmento,
asi como destruirlo. La informacion sobre el segmento identificado como
shmid se devuelve en una estructura shmid_ds:
struct shmid_ds {
struct ipc_perm shm_perm; /* permisos de operacion */
int shm_segsz; /* tamano del segmento (bytes) */
time_t shm_atime; /* tiempo de la ultima union */
time_t shm_dtime; /* tiempo de la ultima separacion */
time_t shm_ctime; /* tiempo de la ultima modificacion */
unsigned short shm_cpid; /* pid del creador */
unsigned short shm_lpid; /* pid of ultimo operador */
short shm_nattch; /* no. 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 mas bajos de los modos de acceso */
ushort seq; /* numero de secuencia */
};
Estan disponibles los siguientes cmds:
IPC_STAT se usa para copiar la informacion sobre el segmento de
memoria compartida en la memoria intermedia buf. El usuario
debe tener permiso de lectura del segmento de memoria
compartida.
IPC_SET se usa para aplicar los cambios que el usuario ha efectuado
en los miembros uid, gid, o mode del campo shm_perms. Solo
se usan los 9 bits mas bajos de mode. El miembro shm_ctime
tambien es actualizado. El usuario debe ser el dueno,
creador o el superusuario.
IPC_RMID se usa para marcar el segmento como destruido. En realidad,
se destruira despues de la ultima separacion (es decir,
cuando el miembro shm_nattch de la estructura asociada
shmid_ds sea cero). El usuario debe ser el dueno, creador o
el superusuario.
El usuario debe asegurarse de que el segmento se destruye al final; de
lo contrario, las paginas de dicho segmento que se cargaron en memoria
al producir un fallo de pagina, permaneceran en memoria o en el fichero
de intercambio.
Ademas, el superusuario puede impedir o permitir que un segmento de
memoria compartida pase al fichero de intercambio con las siguientes
ordenes (solo Linux):
SHM_LOCK impide que un segmento de memoria compartida pase al
fichero de intercambio. El usuario debe cargar en memoria
mediante fallos de pagina cualquier pagina que necesite
estar presente despues de que se habilite el bloqueo.
SHM_UNLOCK permite sacar del fichero de intercambio al segmento de
memoria compartida.
Las llamadas de control IPC_INFO, SHM_STAT y SHM_INFO son usadas por el
programa ipcs(8) para proporcionar informacion sobre los recursos
asignados. En el futuro, estos pueden ser modificados segun se necesite
o movidos a un sistema de ficheros proc.
VALOR DEVUELTO
En caso de exito se devuelve 0, en caso de error -1.
ERRORES
En caso de error, errno tomara uno de los siguientes valores:
EACCES se devuelve si se pide IPC_STAT y shm_perm.modes no permite
acceso de lectura para shmid.
EFAULT el argumento cmd tiene el valor IPC_SET o IPC_STAT pero la
direccion apuntada por buf no es accesible.
EINVAL se devuelve si shmid no es un identificador valido o cmd no
es una orden valida.
EIDRM se devuelve si shmid apunta a un identificador borrado.
EPERM se devuelve si se intenta IPC_SET o IPC_RMID y el
identificador de usuario efectivo del proceso invocador no
es el creador (segun figura en shm_perm.cuid), el
propietario (segun figura en shm_perm.uid), o el super-
usuario.
EOVERFLOW se devuelve si se intenta IPC_STAT, y el valor gid o uid es
demasiado grande para ser almacenado en la estructura
apuntada por buf.
NOTA
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 esto,
deberia bastar una recompilacion bajo glibc-2.1.91 o alguna version
posterior. (El nucleo distingue las llamadas antiguas y nuevas por una
bandera IPC_64 en cmd.)
CONFORME A
SVr4, SVID. SVr4 documenta las condiciones de error adicionales
EINVAL, ENOENT, ENOSPC, ENOMEM, EEXIST. Ni SVr4 ni SVID documentan una
condicion de error EIDRM.
V'EASE TAMBI'EN
shmget(2), shmop(2)