This patch imports the unmodified current version of NetBSD libc. The NetBSD includes are in /nbsd_include, while the libc code itself is split between lib/nbsd_libc and common/lib/libc.
		
			
				
	
	
		
			200 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\"	$NetBSD: msgctl.2,v 1.15 2010/03/22 19:30:55 joerg Exp $
 | 
						|
.\"
 | 
						|
.\" Copyright (c) 1995 Frank van der Linden
 | 
						|
.\" All rights reserved.
 | 
						|
.\"
 | 
						|
.\" Redistribution and use in source and binary forms, with or without
 | 
						|
.\" modification, are permitted provided that the following conditions
 | 
						|
.\" are met:
 | 
						|
.\" 1. Redistributions of source code must retain the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer.
 | 
						|
.\" 2. Redistributions in binary form must reproduce the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer in the
 | 
						|
.\"    documentation and/or other materials provided with the distribution.
 | 
						|
.\" 3. All advertising materials mentioning features or use of this software
 | 
						|
.\"    must display the following acknowledgement:
 | 
						|
.\"      This product includes software developed for the NetBSD Project
 | 
						|
.\"      by Frank van der Linden
 | 
						|
.\" 4. The name of the author may not be used to endorse or promote products
 | 
						|
.\"    derived from this software without specific prior written permission
 | 
						|
.\"
 | 
						|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 | 
						|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
						|
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 | 
						|
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 | 
						|
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
						|
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
						|
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
						|
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
						|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 | 
						|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
						|
.\"
 | 
						|
.Dd August 25, 1999
 | 
						|
.Dt MSGCTL 2
 | 
						|
.Os
 | 
						|
.Sh NAME
 | 
						|
.Nm msgctl
 | 
						|
.Nd message control operations
 | 
						|
.Sh LIBRARY
 | 
						|
.Lb libc
 | 
						|
.Sh SYNOPSIS
 | 
						|
.In sys/msg.h
 | 
						|
.Ft int
 | 
						|
.Fn msgctl "int msqid" "int cmd" "struct msqid_ds *buf"
 | 
						|
.Sh DESCRIPTION
 | 
						|
The
 | 
						|
.Fn msgctl
 | 
						|
system call performs control operations on the message queue specified
 | 
						|
by
 | 
						|
.Fa msqid .
 | 
						|
.Pp
 | 
						|
Each message queue has a
 | 
						|
.Sy msqid_ds
 | 
						|
structure associated with it which contains the following members:
 | 
						|
.Bd -literal
 | 
						|
    struct ipc_perm msg_perm; /* msg queue permission bits */
 | 
						|
    msgqnum_t msg_qnum;       /* # of msgs in the queue */
 | 
						|
    msglen_t  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() */
 | 
						|
    time_t    msg_rtime;      /* time of last msgrcv() */
 | 
						|
    time_t    msg_ctime;      /* time of last msgctl() */
 | 
						|
.Ed
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Sy ipc_perm
 | 
						|
structure used inside the
 | 
						|
.Sy msgid_ds
 | 
						|
structure is defined in
 | 
						|
.In sys/ipc.h
 | 
						|
and contains the following members:
 | 
						|
.Bd -literal
 | 
						|
    uid_t cuid;  /* creator user id */
 | 
						|
    gid_t cgid;  /* creator group id */
 | 
						|
    uid_t uid;   /* user id */
 | 
						|
    gid_t gid;   /* group id */
 | 
						|
    mode_t mode; /* permission (lower 9 bits) */
 | 
						|
.Ed
 | 
						|
.Pp
 | 
						|
The operation to be performed by
 | 
						|
.Fn msgctl
 | 
						|
is specified in
 | 
						|
.Fa cmd
 | 
						|
and is one of:
 | 
						|
.Bl -tag -width IPC_RMIDX
 | 
						|
.It Dv IPC_STAT
 | 
						|
Gather information about the message queue and place it in the
 | 
						|
structure pointed to by
 | 
						|
.Fa buf .
 | 
						|
.It Dv IPC_SET
 | 
						|
Set the value of the
 | 
						|
.Va msg_perm.uid ,
 | 
						|
.Va msg_perm.gid ,
 | 
						|
.Va msg_perm.mode
 | 
						|
and
 | 
						|
.Va 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
 | 
						|
.Va msg_perm.cuid
 | 
						|
or
 | 
						|
.Va msg_perm.uid
 | 
						|
in the data structure associated with the message queue.
 | 
						|
The value of
 | 
						|
.Va msg_qbytes
 | 
						|
can only be increased by the super-user.
 | 
						|
Values for
 | 
						|
.Va msg_qbytes
 | 
						|
that exceed the system limit
 | 
						|
.Pf ( Dv MSGMNB
 | 
						|
from
 | 
						|
.In sys/msg.h )
 | 
						|
are silently truncated to that limit.
 | 
						|
.It Dv IPC_RMID
 | 
						|
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
 | 
						|
.Va msg_perm.cuid
 | 
						|
or
 | 
						|
.Va msg_perm.uid
 | 
						|
values in the data structure associated with the queue can do this.
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
The permission to read from or write to a message queue (see
 | 
						|
.Xr msgsnd 2
 | 
						|
and
 | 
						|
.Xr msgrcv 2 )
 | 
						|
is determined by the
 | 
						|
.Va msg_perm.mode
 | 
						|
field in the same way as is done with files (see
 | 
						|
.Xr chmod 2 ) ,
 | 
						|
but the effective uid can match either the
 | 
						|
.Va msg_perm.cuid
 | 
						|
field or the
 | 
						|
.Va msg_perm.uid
 | 
						|
field, and the
 | 
						|
effective gid can match either
 | 
						|
.Va msg_perm.cgid
 | 
						|
or
 | 
						|
.Va msg_perm.gid .
 | 
						|
.Sh RETURN VALUES
 | 
						|
Upon successful completion, a value of 0 is returned.
 | 
						|
Otherwise, \-1 is returned and the global variable
 | 
						|
.Va errno
 | 
						|
is set to indicate the error.
 | 
						|
.Sh ERRORS
 | 
						|
.Fn msgctl
 | 
						|
will fail if:
 | 
						|
.Bl -tag -width Er
 | 
						|
.It Bq Er EPERM
 | 
						|
.Fa cmd
 | 
						|
is equal to
 | 
						|
.Dv IPC_SET
 | 
						|
or
 | 
						|
.Dv IPC_RMID
 | 
						|
and the caller is not the super-user, nor does
 | 
						|
the effective uid match either the
 | 
						|
.Va msg_perm.uid
 | 
						|
or
 | 
						|
.Va msg_perm.cuid
 | 
						|
fields of the data structure associated with the message queue.
 | 
						|
.Pp
 | 
						|
An attempt was made to increase the value of
 | 
						|
.Va msg_qbytes
 | 
						|
through
 | 
						|
.Dv IPC_SET ,
 | 
						|
but the caller is not the super-user.
 | 
						|
.It Bq Er EACCES
 | 
						|
.Fa cmd
 | 
						|
is
 | 
						|
.Dv IPC_STAT
 | 
						|
and the caller has no read permission for this message queue.
 | 
						|
.It Bq Er EINVAL
 | 
						|
.Fa msqid
 | 
						|
is not a valid message queue identifier.
 | 
						|
.Pp
 | 
						|
.Fa cmd
 | 
						|
is not a valid command.
 | 
						|
.It Bq Er EFAULT
 | 
						|
.Fa buf
 | 
						|
specifies an invalid address.
 | 
						|
.El
 | 
						|
.Sh SEE ALSO
 | 
						|
.Xr msgget 2 ,
 | 
						|
.Xr msgrcv 2 ,
 | 
						|
.Xr msgsnd 2
 | 
						|
.Sh STANDARDS
 | 
						|
The
 | 
						|
.Nm
 | 
						|
system call conforms to
 | 
						|
.St -xsh5 .
 | 
						|
.Sh HISTORY
 | 
						|
Message queues appeared in the first release of
 | 
						|
.At V .
 |