The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 [Cписок руководств | Печать]

msgctl (3)
  • msgctl (2) ( Solaris man: Системные вызовы )
  • msgctl (2) ( Русские man: Системные вызовы )
  • msgctl (2) ( Linux man: Системные вызовы )
  • >> msgctl (3) ( FreeBSD man: Библиотечные вызовы )
  • msgctl (3) ( POSIX man: Библиотечные вызовы )

  • BSD mandoc


     - message control operations


    Lb libc


       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/msg.h>
    int msgctl (int msqid int cmd struct msqid_ds *buf);


    The msgctl ();
    system call performs some control operations on the message queue specified by Fa msqid .

    Each message queue has a data structure associated with it, parts of which may be altered by msgctl ();
    and parts of which determine the actions of msgctl (.);
    The data structure is defined in    #include <sys/msg.h>
    and contains (amongst others) the following members:

    struct msqid_ds {
            struct  ipc_perm msg_perm;      /* msg queue permission bits */
            struct  msg *msg_first; /* first message in the queue */
            struct  msg *msg_last;  /* last message in the queue */
            u_long  msg_cbytes;     /* number of bytes in use on the queue */
            u_long  msg_qnum;       /* number of msgs in the queue */
            u_long  msg_qbytes;     /* max # of bytes on the queue */
            pid_t   msg_lspid;      /* pid of last msgsnd() */
            pid_t   msg_lrpid;      /* pid of last msgrcv() */
            time_t  msg_stime;      /* time of last msgsnd() */
            long    msg_pad1;
            time_t  msg_rtime;      /* time of last msgrcv() */
            long    msg_pad2;
            time_t  msg_ctime;      /* time of last msgctl() */
            long    msg_pad3;
            long    msg_pad4[4];

    The Vt ipc_perm structure used inside the Vt msqid_ds structure is defined in    #include <sys/ipc.h>
    and looks like this:

    struct ipc_perm {
            ushort  cuid;   /* creator user id */
            ushort  cgid;   /* creator group id */
            ushort  uid;    /* user id */
            ushort  gid;    /* group id */
            ushort  mode;   /* r/w permission */
            ushort  seq;    /* sequence # (to generate unique msg/sem/shm id) */
            key_t   key;    /* user specified msg/sem/shm key */

    The operation to be performed by msgctl ();
    is specified in Fa cmd and is one of:

    Gather information about the message queue and place it in the structure pointed to by Fa buf .
    Set the value of the msg_perm.uid msg_perm.gid msg_perm.mode and msg_qbytes fields in the structure associated with Fa msqid . The values are taken from the corresponding fields in the structure pointed to by Fa buf . This operation can only be executed by the super-user, or a process that has an effective user id equal to either msg_perm.cuid or msg_perm.uid in the data structure associated with the message queue. The value of msg_qbytes can only be increased by the super-user. Values for msg_qbytes that exceed the system limit (MSGMNB from In sys/msg.h ) are silently truncated to that limit.
    Remove the message queue specified by Fa msqid and destroy the data associated with it. Only the super-user or a process with an effective uid equal to the msg_perm.cuid or msg_perm.uid values in the data structure associated with the queue can do this.

    The permission to read from or write to a message queue (see msgsnd(3) and msgrcv(3)) is determined by the msg_perm.mode field in the same way as is done with files (see chmod(2)), but the effective uid can match either the msg_perm.cuid field or the msg_perm.uid field, and the effective gid can match either msg_perm.cgid or msg_perm.gid  


    Rv -std msgctl  


    The msgctl ();
    function will fail if:

    Bq Er EPERM
    The Fa cmd argument is equal to IPC_SET or IPC_RMID and the caller is not the super-user, nor does the effective uid match either the msg_perm.uid or msg_perm.cuid fields of the data structure associated with the message queue.

    An attempt is made to increase the value of msg_qbytes through IPC_SET but the caller is not the super-user.

    Bq Er EACCES
    The command is IPC_STAT and the caller has no read permission for this message queue.
    Bq Er EINVAL
    The Fa msqid argument is not a valid message queue identifier.

    cmd is not a valid command.

    Bq Er EFAULT
    The Fa buf argument specifies an invalid address.



    msgget(3), msgrcv(3), msgsnd(3)  


    Message queues appeared in the first release of AT&T System V .




    Поиск по тексту MAN-ов: 

    Inferno Solutions
    Hosting by

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру