 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.
		
			
				
	
	
		
			210 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: shmctl.2,v 1.21 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 November 25, 2006
 | |
| .Dt SHMCTL 2
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm shmctl
 | |
| .Nd shared memory control operations
 | |
| .Sh LIBRARY
 | |
| .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In sys/shm.h
 | |
| .Ft int
 | |
| .Fn shmctl "int shmid" "int cmd" "struct shmid_ds *buf"
 | |
| .Sh DESCRIPTION
 | |
| The
 | |
| .Fn shmctl
 | |
| system call performs control operations on the shared memory segment
 | |
| specified by
 | |
| .Fa shmid .
 | |
| .Pp
 | |
| Each shared memory segment has a
 | |
| .Sy shmid_ds
 | |
| structure associated with it which contains the following members:
 | |
| .Bd -literal
 | |
|     struct ipc_perm shm_perm;   /* operation permissions */
 | |
|     size_t          shm_segsz;  /* size of segment in bytes */
 | |
|     pid_t           shm_lpid;   /* pid of last shm op */
 | |
|     pid_t           shm_cpid;   /* pid of creator */
 | |
|     shmatt_t        shm_nattch; /* # of current attaches */
 | |
|     time_t          shm_atime;  /* last shmat() time */
 | |
|     time_t          shm_dtime;  /* last shmdt() time */
 | |
|     time_t          shm_ctime;  /* last change by shmctl() */
 | |
| .Ed
 | |
| .Pp
 | |
| The
 | |
| .Sy ipc_perm
 | |
| structure used inside the
 | |
| .Sy shmid_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 shmctl
 | |
| is specified in
 | |
| .Fa cmd
 | |
| and is one of:
 | |
| .Bl -tag -width IPC_RMIDX
 | |
| .It Dv IPC_STAT
 | |
| Gather information about the shared memory segment and place it in the
 | |
| structure pointed to by
 | |
| .Fa buf .
 | |
| .It Dv IPC_SET
 | |
| Set the value of the
 | |
| .Va shm_perm.uid ,
 | |
| .Va shm_perm.gid
 | |
| and
 | |
| .Va shm_perm.mode
 | |
| fields in the structure associated with
 | |
| .Fa shmid .
 | |
| 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 shm_perm.cuid
 | |
| or
 | |
| .Va shm_perm.uid
 | |
| in the data structure associated with the shared memory segment.
 | |
| .It Dv IPC_RMID
 | |
| Remove the shared memory segment specified by
 | |
| .Fa shmid
 | |
| and destroy the data associated with it.
 | |
| Only the super-user or a process with an effective uid equal to the
 | |
| .Va shm_perm.cuid
 | |
| or
 | |
| .Va shm_perm.uid
 | |
| values in the data structure associated with the segment can do this.
 | |
| .It Dv SHM_LOCK
 | |
| Lock the shared memory segment specified by
 | |
| .Fa shmid
 | |
| in memory.
 | |
| This operation can only be executed by the super-user.
 | |
| .It Dv SHM_UNLOCK
 | |
| Unlock the shared memory segment specified by
 | |
| .Fa shmid .
 | |
| This operation can only be executed by the super-user.
 | |
| .El
 | |
| .Pp
 | |
| The read and write permissions on a shared memory identifier
 | |
| are determined by the
 | |
| .Va shm_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 shm_perm.cuid
 | |
| field or the
 | |
| .Va shm_perm.uid
 | |
| field, and the
 | |
| effective gid can match either
 | |
| .Va shm_perm.cgid
 | |
| or
 | |
| .Va shm_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 shmctl
 | |
| will fail if:
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er EACCES
 | |
| The command is
 | |
| .Dv IPC_STAT
 | |
| and the caller has no read permission for this shared memory segment.
 | |
| .It Bq Er EFAULT
 | |
| .Fa buf
 | |
| specifies an invalid address.
 | |
| .It Bq Er EINVAL
 | |
| .Fa shmid
 | |
| is not a valid shared memory segment identifier.
 | |
| .Pp
 | |
| .Va cmd
 | |
| is not a valid command.
 | |
| .It Bq Er ENOMEM
 | |
| The
 | |
| .Fa cmd
 | |
| is equal to
 | |
| .Dv SHM_LOCK
 | |
| and there is not enough physical memory.
 | |
| .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 shm_perm.uid
 | |
| or
 | |
| .Va shm_perm.cuid
 | |
| fields of the data structure associated with the shared memory segment.
 | |
| .Pp
 | |
| An attempt was made to increase the value of
 | |
| .Va shm_qbytes
 | |
| through
 | |
| .Dv IPC_SET
 | |
| but the caller is not the super-user.
 | |
| .Pp
 | |
| The
 | |
| .Fa cmd
 | |
| is equal to
 | |
| .Dv SHM_LOCK
 | |
| or
 | |
| .Dv SHM_UNLOCK
 | |
| and the caller is not the super-user.
 | |
| .El
 | |
| .Sh SEE ALSO
 | |
| .Xr ipcrm 1 ,
 | |
| .Xr ipcs 1 ,
 | |
| .Xr shmat 2 ,
 | |
| .Xr shmget 2
 | |
| .Sh STANDARDS
 | |
| The
 | |
| .Nm
 | |
| system call conforms to
 | |
| .St -xsh5 .
 | |
| .Sh HISTORY
 | |
| Shared memory segments appeared in the first release of
 | |
| .At V .
 |