1/* Copyright (C) 1995, 1996, 1997, 2000, 2002, 2004, 2009
2   Free Software Foundation, Inc.
3   This file is part of the GNU C Library.
4
5   The GNU C Library is free software; you can redistribute it and/or
6   modify it under the terms of the GNU Lesser General Public
7   License as published by the Free Software Foundation; either
8   version 2.1 of the License, or (at your option) any later version.
9
10   The GNU C Library is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   Lesser General Public License for more details.
14
15   You should have received a copy of the GNU Lesser General Public
16   License along with the GNU C Library; if not, write to the Free
17   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18   02111-1307 USA.  */
19
20#ifndef _SYS_SHM_H
21# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
22#endif
23
24#include <bits/types.h>
25
26/* Permission flag for shmget.  */
27#define SHM_R		0400		/* or S_IRUGO from <linux/stat.h> */
28#define SHM_W		0200		/* or S_IWUGO from <linux/stat.h> */
29
30/* Flags for `shmat'.  */
31#define SHM_RDONLY	010000		/* attach read-only else read-write */
32#define SHM_RND		020000		/* round attach address to SHMLBA */
33#define SHM_REMAP	040000		/* take-over region on attach */
34#define SHM_EXEC	0100000		/* execution access */
35
36/* Commands for `shmctl'.  */
37#define SHM_LOCK	11		/* lock segment (root only) */
38#define SHM_UNLOCK	12		/* unlock segment (root only) */
39
40__BEGIN_DECLS
41
42/* Segment low boundary address multiple.  */
43#define SHMLBA		(__getpagesize ())
44extern int __getpagesize (void) __THROW __attribute__ ((__const__));
45
46
47/* Type to count number of attaches.  */
48typedef unsigned long int shmatt_t;
49
50/* Data structure describing a shared memory segment.  */
51struct shmid_ds
52  {
53    struct ipc_perm shm_perm;		/* operation permission struct */
54    size_t shm_segsz;			/* size of segment in bytes */
55    __time_t shm_atime;			/* time of last shmat() */
56#if __WORDSIZE == 32
57    unsigned long int __unused1;
58#endif
59    __time_t shm_dtime;			/* time of last shmdt() */
60#if __WORDSIZE == 32
61    unsigned long int __unused2;
62#endif
63    __time_t shm_ctime;			/* time of last change by shmctl() */
64#if __WORDSIZE == 32
65    unsigned long int __unused3;
66#endif
67    __pid_t shm_cpid;			/* pid of creator */
68    __pid_t shm_lpid;			/* pid of last shmop */
69    shmatt_t shm_nattch;		/* number of current attaches */
70    unsigned long int __unused4;
71    unsigned long int __unused5;
72  };
73
74#ifdef __USE_MISC
75
76/* ipcs ctl commands */
77# define SHM_STAT 	13
78# define SHM_INFO 	14
79
80/* shm_mode upper byte flags */
81# define SHM_DEST	01000	/* segment will be destroyed on last detach */
82# define SHM_LOCKED	02000   /* segment will not be swapped */
83# define SHM_HUGETLB	04000	/* segment is mapped via hugetlb */
84# define SHM_NORESERVE	010000	/* don't check for reservations */
85
86struct	shminfo
87  {
88    unsigned long int shmmax;
89    unsigned long int shmmin;
90    unsigned long int shmmni;
91    unsigned long int shmseg;
92    unsigned long int shmall;
93    unsigned long int __unused1;
94    unsigned long int __unused2;
95    unsigned long int __unused3;
96    unsigned long int __unused4;
97  };
98
99struct shm_info
100  {
101    int used_ids;
102    unsigned long int shm_tot;	/* total allocated shm */
103    unsigned long int shm_rss;	/* total resident shm */
104    unsigned long int shm_swp;	/* total swapped shm */
105    unsigned long int swap_attempts;
106    unsigned long int swap_successes;
107  };
108
109#endif /* __USE_MISC */
110
111__END_DECLS
112