bionic (2) msgget.2.gz

Provided by: manpages-es_1.55-10_all bug

NOMBRE

       msgget - devuelve el identificador para una cola de mensajes

SINOPSIS

       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/msg.h>

       int msgget(key_t key, int msgflg);

DESCRIPCIÓN

       La  función  devuelve  el identificador de la cola de mensajes asociada a key.  Se crea una nueva cola de
       mensajes si key tiene el valor IPC_PRIVATE, o si key no es IPC_PRIVATE pero no  existe  ninguna  cola  de
       mensajes  asociada  a  key,  y  IPC_CREAT  se inserta en msgflg (esto es, msgflg&IPC_CREAT es distinto de
       cero).  La presencia en msgflg de los campos IPC_CREAT y IPC_EXCL desempeñan el mismo papel, con respecto
       a  la  existencia  de  la  cola de mensajes, que O_CREAT y O_EXCL en el argumento "mode" de la llamada al
       sistema open(2), es decir, la función msgget falla si msgflg inserta IPC_CREAT y IPC_EXCL y ya esiste una
       cola de mensajes para key.

       En  la  creación,  los  9 bits más bajos del argumento msgflg definen los permisos de acceso a la cola de
       mensajes.  Estos bits para los permisos tienen la misma forma y semántica que  los  de  los  permisos  de
       acceso en las llamadas al sistema open(2) o creat(2) (Los permisos de ejecución no son usados.)

       Si  se  crea  una  nueva  cola  de  mensajes, la llamada al sistema inicializa la estructura de datos del
       sistema para la cola msqid_ds como se muestra:

              msg_perm.cuid y msg_perm.uid son  fijados  al  identificador  del  usuario  efectivo  del  proceso
              invocador.

              msg_perm.cgid y msg_perm.gid son fijados al identificador de grupo efectivo del proveso invocador.

              Los 9 bits más bajo de msg_perm.mode son fijados a los 9 bits más bajos de msgflg.

              msg_qnum, msg_lspid, msg_lrpid, msg_stime y msg_rtime son puestos a 0.

              msg_ctime contendrá la hora actual

              msg_qbytes será igual al límite impuesto por el sistema MSGMNB.

       Si  la  cola de mensajes ya existe, se verifican los permisos de acceso, y ser realiza una comprobación a
       fin de verificar si está marcada para su destrucción.

VALOR DEVUELTO

       Si ha funcionado correctamente, devuelve el idenficador para la cola de mensajes (un entero no negativo),
       en otro caso -1 con errno indicando el error.

ERRORES

       En caso de error, errno tendrá uno de los siguientes valores:

       EACCES     Existe una cola de mensajes para key, pero el proceso no tiene permiso de acceso a la cola.

       EEXIST     Existe una cola de mensajes para key y msgflg contiene IPC_CREAT y IPC_EXCL.

       ENOENT     No existe una cola de mensajes para key y msgflg no contiene IPC_CREAT.

       ENOMEM     Una  cola  de mensajes ha de ser creada pero el sistema no contiene suficiente memoria para la
                  nueva estructura de datos.

       ENOSPC     Una cola de mensajes ha de ser creada pero el límite del sistema  para  el  máximo  número  de
                  colas de mensajes (MSGMNI) será superado.

OBSERVACIONES

       IPC_PRIVATE  no  es un campo de tipo bandera, es del tipo key_t.  Si este valor especial es utilizado por
       key, la llamada al sistema ignorará todo excepto los 9 bits de menor orden de msgflg  y  crea  una  nueva
       cola de mensajes (si ha funcionado).

       Lo siguiente es una limitación en los recursos del sistema que afecta a la llamada msgget

       MSGMNI     Número máximo de colas de mensajes soportadas por el sistema: depende de la política tomada.

FALLOS

       La  elección  del  nombre  IPC_PRIVATE puede que fuera desafortunada, IPC_NEW mostraría más claramente su
       función.

CONFORME A

       SVr4, SVID.  Hasta la versión 2.3.20 Linux devolvía EIDRM cuando se llamaba a  msgget  con  una  cola  de
       mensajes planificada para ser borrada.

VÉASE TAMBIÉN

       ftok(3), ipc(5), msgctl(2), msgsnd(2), msgrcv(2)