1 /* Copyright (C) 1995-2021 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3 
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8 
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13 
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, see
16    <https://www.gnu.org/licenses/>.  */
17 
18 #ifndef _SYS_SHM_H
19 # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
20 #endif
21 
22 #include <bits/types.h>
23 #include <bits/wordsize.h>
24 #include <bits/shmlba.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 /* Type to count number of attaches.  */
43 typedef __syscall_ulong_t shmatt_t;
44 
45 #include <bits/types/struct_shmid_ds.h>
46 #include <bits/types/struct_shmid64_ds.h>
47 
48 #ifdef __USE_MISC
49 
50 /* ipcs ctl commands */
51 # define SHM_STAT 	13
52 # define SHM_INFO 	14
53 # define SHM_STAT_ANY	15
54 
55 /* shm_mode upper byte flags */
56 # define SHM_DEST	01000	/* segment will be destroyed on last detach */
57 # define SHM_LOCKED	02000   /* segment will not be swapped */
58 # define SHM_HUGETLB	04000	/* segment is mapped via hugetlb */
59 # define SHM_NORESERVE	010000	/* don't check for reservations */
60 
61 struct	shminfo
62   {
63     __syscall_ulong_t shmmax;
64     __syscall_ulong_t shmmin;
65     __syscall_ulong_t shmmni;
66     __syscall_ulong_t shmseg;
67     __syscall_ulong_t shmall;
68     __syscall_ulong_t __glibc_reserved1;
69     __syscall_ulong_t __glibc_reserved2;
70     __syscall_ulong_t __glibc_reserved3;
71     __syscall_ulong_t __glibc_reserved4;
72   };
73 
74 struct shm_info
75   {
76     int used_ids;
77     __syscall_ulong_t shm_tot;	/* total allocated shm */
78     __syscall_ulong_t shm_rss;	/* total resident shm */
79     __syscall_ulong_t shm_swp;	/* total swapped shm */
80     __syscall_ulong_t swap_attempts;
81     __syscall_ulong_t swap_successes;
82   };
83 
84 #endif /* __USE_MISC */
85 
86 __END_DECLS
87