 b6cbf7203b
			
		
	
	
		b6cbf7203b
		
	
	
	
	
		
			
			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.
		
			
				
	
	
		
			245 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			245 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: semctl.2,v 1.20 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 SEMCTL 2
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm semctl
 | |
| .Nd semaphore control operations
 | |
| .Sh LIBRARY
 | |
| .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In sys/sem.h
 | |
| .Ft int
 | |
| .Fn semctl "int semid" "int semnum" "int cmd" "..."
 | |
| .Sh DESCRIPTION
 | |
| The
 | |
| .Fn semctl
 | |
| system call provides a number of control operations on the semaphore specified
 | |
| by
 | |
| .Fa semnum
 | |
| and
 | |
| .Fa semid .
 | |
| The operation to be performed is specified in
 | |
| .Fa cmd
 | |
| (see below).
 | |
| The fourth argument is optional and depends upon the operation requested.
 | |
| If required, it is a union of the following fields:
 | |
| .Bd -literal
 | |
|     int     val;            /* value for SETVAL */
 | |
|     struct  semid_ds *buf;  /* buffer for IPC_{STAT,SET} */
 | |
|     u_short *array;         /* array for GETALL \*[Am] SETALL */
 | |
| .Ed
 | |
| .Pp
 | |
| The
 | |
| .Sy semid_ds
 | |
| structure used in the
 | |
| .Dv IPC_SET
 | |
| and
 | |
| .Dv IPC_STAT
 | |
| commands is defined in
 | |
| .In sys/sem.h
 | |
| and contains the following members:
 | |
| .Bd -literal
 | |
|     struct ipc_perm sem_perm; /* operation permissions */
 | |
|     unsigned short sem_nsems; /* number of sems in set */
 | |
|     time_t sem_otime;         /* last operation time */
 | |
|     time_t sem_ctime;         /* last change time */
 | |
| .Ed
 | |
| .Pp
 | |
| The
 | |
| .Sy ipc_perm
 | |
| structure used inside the
 | |
| .Sy semid_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
 | |
| .Fn semctl
 | |
| provides the following operations:
 | |
| .Bl -tag -width IPC_RMIDX
 | |
| .It Dv GETVAL
 | |
| Return the value of the semaphore.
 | |
| .It Dv SETVAL
 | |
| Set the value of the semaphore to
 | |
| .Fa arg.val ,
 | |
| where
 | |
| .Fa arg
 | |
| is the fourth argument to
 | |
| .Fn semctl .
 | |
| .It Dv GETPID
 | |
| Return the pid of the last process that did an operation on this semaphore.
 | |
| .It Dv GETNCNT
 | |
| Return the number of processes waiting to acquire the semaphore.
 | |
| .It Dv GETZCNT
 | |
| Return the number of processes waiting for the value of the semaphore to
 | |
| reach 0.
 | |
| .It Dv GETALL
 | |
| Return the values of all the semaphores associated with
 | |
| .Fa semid .
 | |
| .It Dv SETALL
 | |
| Set the values of all the semaphores that are associated with the semaphore
 | |
| identifier
 | |
| .Fa semid
 | |
| to the corresponding values in
 | |
| .Fa arg.array ,
 | |
| where
 | |
| .Fa arg
 | |
| is the fourth argument to
 | |
| .Fn semctl .
 | |
| .It Dv IPC_STAT
 | |
| Gather information about a semaphore and place the information in the
 | |
| structure pointed to by
 | |
| .Fa arg.buf ,
 | |
| where
 | |
| .Fa arg
 | |
| is the fourth argument to
 | |
| .Fn semctl .
 | |
| .It Dv IPC_SET
 | |
| Set the value of the
 | |
| .Va sem_perm.uid ,
 | |
| .Va sem_perm.gid
 | |
| and
 | |
| .Va sem_perm.mode
 | |
| fields in the structure associated with the semaphore.
 | |
| The values are taken from the corresponding fields in the structure
 | |
| pointed to by
 | |
| .Fa arg.buf ,
 | |
| there
 | |
| .Fa arg
 | |
| is the fourth argument to
 | |
| .Fn semctl .
 | |
| This operation can only be executed by the super-user, or a process that
 | |
| has an effective user id equal to either
 | |
| .Va sem_perm.cuid
 | |
| or
 | |
| .Va sem_perm.uid
 | |
| in the data structure associated with the semaphore.
 | |
| .It Dv IPC_RMID
 | |
| Remove the semaphores associated with
 | |
| .Fa semid
 | |
| from the system and destroy the data structures associated with it.
 | |
| Only the super-user or a process with an effective uid equal to the
 | |
| .Va sem_perm.cuid
 | |
| or
 | |
| .Va sem_perm.uid
 | |
| values in the data structure associated with the semaphore can do this.
 | |
| .El
 | |
| .Pp
 | |
| The permission to read or change a semaphore (see
 | |
| .Xr semop 2 )
 | |
| is determined by the
 | |
| .Va sem_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 sem_perm.cuid
 | |
| field or the
 | |
| .Va sem_perm.uid
 | |
| field, and the
 | |
| effective gid can match either
 | |
| .Va sem_perm.cgid
 | |
| or
 | |
| .Va sem_perm.gid .
 | |
| .Sh RETURN VALUES
 | |
| For the
 | |
| .Dv GETVAL ,
 | |
| .Dv GETPID ,
 | |
| .Dv GETNCNT ,
 | |
| and
 | |
| .Dv GETZCNT
 | |
| operations,
 | |
| .Fn semctl
 | |
| returns one of the values described above if successful.
 | |
| All other operations will make
 | |
| .Fn semctl
 | |
| return 0 if no errors occur.
 | |
| Otherwise \-1 is returned and
 | |
| .Va errno
 | |
| set to reflect the error.
 | |
| .Sh ERRORS
 | |
| .Fn semctl
 | |
| will fail if:
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er EACCES
 | |
| The caller has no operation permission for this semaphore.
 | |
| .It Bq Er EFAULT
 | |
| .Fa arg.buf
 | |
| or
 | |
| .Fa arg.array
 | |
| specifies an invalid address.
 | |
| .It Bq Er EINVAL
 | |
| .Fa semid
 | |
| is not a valid message semaphore identifier.
 | |
| .Pp
 | |
| .Va cmd
 | |
| is not a valid command.
 | |
| .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 sem_perm.uid
 | |
| or
 | |
| .Va sem_perm.cuid
 | |
| fields of the data structure associated with the semaphore.
 | |
| .It Bq Er ERANGE
 | |
| .Fa cmd
 | |
| is equal to
 | |
| .Dv SETVAL
 | |
| or
 | |
| .Dv SETALL
 | |
| and the value to be set is greater than the system semaphore maximum value.
 | |
| .El
 | |
| .Sh SEE ALSO
 | |
| .Xr semget 2 ,
 | |
| .Xr semop 2
 | |
| .Sh STANDARDS
 | |
| The
 | |
| .Nm
 | |
| system call conforms to
 | |
| .St -xsh5 .
 | |
| .Sh HISTORY
 | |
| Semaphores appeared in the first release of
 | |
| .At V .
 |