]>
git.saurik.com Git - apple/xnu.git/blob - bsd/sys/shm.h
   2  * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved. 
   4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 
   6  * This file contains Original Code and/or Modifications of Original Code 
   7  * as defined in and that are subject to the Apple Public Source License 
   8  * Version 2.0 (the 'License'). You may not use this file except in 
   9  * compliance with the License. The rights granted to you under the License 
  10  * may not be used to create, or enable the creation or redistribution of, 
  11  * unlawful or unlicensed copies of an Apple operating system, or to 
  12  * circumvent, violate, or enable the circumvention or violation of, any 
  13  * terms of an Apple operating system software license agreement. 
  15  * Please obtain a copy of the License at 
  16  * http://www.opensource.apple.com/apsl/ and read it before using this file. 
  18  * The Original Code and all software distributed under the License are 
  19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  23  * Please see the License for the specific language governing rights and 
  24  * limitations under the License. 
  26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 
  28 /*      $NetBSD: shm.h,v 1.15 1994/06/29 06:45:17 cgd Exp $     */ 
  31  * Copyright (c) 1994 Adam Glass 
  32  * All rights reserved. 
  34  * Redistribution and use in source and binary forms, with or without 
  35  * modification, are permitted provided that the following conditions 
  37  * 1. Redistributions of source code must retain the above copyright 
  38  *    notice, this list of conditions and the following disclaimer. 
  39  * 2. Redistributions in binary form must reproduce the above copyright 
  40  *    notice, this list of conditions and the following disclaimer in the 
  41  *    documentation and/or other materials provided with the distribution. 
  42  * 3. All advertising materials mentioning features or use of this software 
  43  *    must display the following acknowledgement: 
  44  *      This product includes software developed by Adam Glass. 
  45  * 4. The name of the author may not be used to endorse or promote products 
  46  *    derived from this software without specific prior written permission 
  48  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 
  49  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
  50  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
  51  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 
  52  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
  53  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
  54  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
  55  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
  56  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
  57  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  61  * As defined+described in "X/Open System Interfaces and Headers" 
  68 #include <sys/cdefs.h> 
  69 #include <sys/_types.h> 
  72  * [XSI]        All of the symbols from <sys/ipc.h> SHALL be defined 
  73  *              when this header is included 
  78  * [XSI] The pid_t, time_t, key_t, and size_t types shall be defined as 
  79  * described in <sys/types.h>. 
  81  * NOTE:        The definition of the key_t type is implicit from the 
  82  *              inclusion of <sys/ipc.h> 
  85 typedef __darwin_pid_t  pid_t
; 
  91 typedef __darwin_time_t 
time_t; 
  96 typedef __darwin_size_t 
size_t; 
 100  * [XSI] The unsigned integer type used for the number of current attaches 
 101  * that MUST be able to store values at least as large as a type unsigned 
 104 typedef unsigned short  shmatt_t
; 
 108  * Possible flag values which may be OR'ed into the third argument to 
 111 #define SHM_RDONLY      010000  /* [XSI] Attach read-only (else read-write) */ 
 112 #define SHM_RND         020000  /* [XSI] Round attach address to SHMLBA */ 
 115  * This value is symbolic, and generally not expected to be sed by user 
 116  * programs directly, although such ise is permitted by the standard.  Its 
 117  * value in our implementation is equal to the number of bytes per page. 
 119  * NOTE:        We DO NOT obtain this value from the appropriate system 
 120  *              headers at this time, to avoid the resulting namespace 
 121  *              pollution, which is why we discourages its use. 
 123 #define SHMLBA      4096        /* [XSI] Segment low boundary address multiple*/ 
 125 /* "official" access mode definitions; somewhat braindead since you have 
 126    to specify (SHM_* >> 3) for group and (SHM_* >> 6) for world permissions */ 
 127 #define SHM_R       (IPC_R) 
 128 #define SHM_W       (IPC_W) 
 131  * Technically, we should force all code references to the new structure 
 132  * definition, not in just the standards conformance case, and leave the 
 133  * legacy interface there for binary compatibility only.  Currently, we 
 134  * are only forcing this for programs requesting standards conformance. 
 136 #if defined(__POSIX_C_SOURCE) || defined(kernel) || defined(__LP64__) 
 138  * Structure used internally. 
 140  * This structure is exposed because standards dictate that it is used as 
 141  * the third argment to shmctl(). 
 143  * NOTE:        The field shm_internal is not meaningful in user space, 
 144  *              and mst not be used there. 
 146 struct __shmid_ds_new 
{ 
 147         struct __ipc_perm_new shm_perm
; /* [XSI] Operation permission value */ 
 148         size_t          shm_segsz
;      /* [XSI] Size of segment in bytes */ 
 149         pid_t           shm_lpid
;       /* [XSI] PID of last shared memory op */ 
 150         pid_t           shm_cpid
;       /* [XSI] PID of creator */ 
 151         short           shm_nattch
;     /* [XSI] Number of current attaches */ 
 152         time_t          shm_atime
;      /* [XSI] Time of last shmat() */ 
 153         time_t          shm_dtime
;      /* [XSI] Time of last shmdt() */ 
 154         time_t          shm_ctime
;      /* [XSI] Time of last shmctl() change */ 
 155         void            *shm_internal
;  /* reserved for kernel use */ 
 157 #define shmid_ds        __shmid_ds_new 
 158 #else   /* !_POSIX_C_SOURCE */ 
 159 #define shmid_ds        __shmid_ds_old 
 160 #endif  /* !_POSIX_C_SOURCE */ 
 162 #if !defined(__POSIX_C_SOURCE) && !defined(__LP64__) 
 163 struct __shmid_ds_old 
{ 
 164         struct __ipc_perm_old shm_perm
; /* [XSI] Operation permission value */ 
 165         size_t          shm_segsz
;      /* [XSI] Size of segment in bytes */ 
 166         pid_t           shm_lpid
;       /* [XSI] PID of last shared memory op */ 
 167         pid_t           shm_cpid
;       /* [XSI] PID of creator */ 
 168         short           shm_nattch
;     /* [XSI] Number of current attaches */ 
 169         time_t          shm_atime
;      /* [XSI] Time of last shmat() */ 
 170         time_t          shm_dtime
;      /* [XSI] Time of last shmdt() */ 
 171         time_t          shm_ctime
;      /* [XSI] Time of last shmctl() change */ 
 172         void            *shm_internal
;  /* reserved for kernel use */ 
 174 #endif  /* !_POSIX_C_SOURCE */ 
 179 #ifndef _POSIX_C_SOURCE 
 180 int     shmsys(int, ...); 
 181 #endif /* !_POSIX_C_SOURCE */ 
 182 void    *shmat (int, const void *, int); 
 183 int     shmctl(int, int, struct shmid_ds 
*) __DARWIN_ALIAS(shmctl
); 
 184 int     shmdt(const void *); 
 185 int     shmget(key_t
, size_t, int); 
 190 #endif /* !_SYS_SHM_H_ */