1
0

shm.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. //
  2. // Copyright 2026 Aarav Ravindra Kharade
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. //
  16. /* Copyright (C) 1995-2026 Free Software Foundation, Inc.
  17. This file is part of the GNU C Library.
  18. The GNU C Library is free software; you can redistribute it and/or
  19. modify it under the terms of the GNU Lesser General Public
  20. License as published by the Free Software Foundation; either
  21. version 2.1 of the License, or (at your option) any later version.
  22. The GNU C Library is distributed in the hope that it will be useful,
  23. but WITHOUT ANY WARRANTY; without even the implied warranty of
  24. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  25. Lesser General Public License for more details.
  26. You should have received a copy of the GNU Lesser General Public
  27. License along with the GNU C Library; if not, see
  28. <https://www.gnu.org/licenses/>. */
  29. #ifndef _SYS_SHM_H
  30. # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
  31. #endif
  32. #include <bits/types.h>
  33. #include <bits/wordsize.h>
  34. #include <bits/shmlba.h>
  35. /* Permission flag for shmget. */
  36. #define SHM_R 0400 /* or S_IRUGO from <linux/stat.h> */
  37. #define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */
  38. /* Flags for `shmat'. */
  39. #define SHM_RDONLY 010000 /* attach read-only else read-write */
  40. #define SHM_RND 020000 /* round attach address to SHMLBA */
  41. #define SHM_REMAP 040000 /* take-over region on attach */
  42. #define SHM_EXEC 0100000 /* execution access */
  43. /* Commands for `shmctl'. */
  44. #define SHM_LOCK 11 /* lock segment (root only) */
  45. #define SHM_UNLOCK 12 /* unlock segment (root only) */
  46. __BEGIN_DECLS
  47. /* Type to count number of attaches. */
  48. typedef __syscall_ulong_t shmatt_t;
  49. #include <bits/types/struct_shmid_ds.h>
  50. #include <bits/types/struct_shmid64_ds.h>
  51. #ifdef __USE_MISC
  52. /* ipcs ctl commands */
  53. # define SHM_STAT 13
  54. # define SHM_INFO 14
  55. # define SHM_STAT_ANY 15
  56. /* shm_mode upper byte flags */
  57. # define SHM_DEST 01000 /* segment will be destroyed on last detach */
  58. # define SHM_LOCKED 02000 /* segment will not be swapped */
  59. # define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */
  60. # define SHM_NORESERVE 010000 /* don't check for reservations */
  61. /* When SHM_HUGETLB is set, bits [26:31] encode the log2 of the huge page size.
  62. The following definitions are associated with this huge page size encoding.
  63. It is responsibility of the application to know which sizes are supported on
  64. the running system. See shmget(2) man page for details. */
  65. #define SHM_HUGE_SHIFT 26
  66. #define SHM_HUGE_MASK 0x3f
  67. #define SHM_HUGE_16KB (14 << SHM_HUGE_SHIFT)
  68. #define SHM_HUGE_64KB (16 << SHM_HUGE_SHIFT)
  69. #define SHM_HUGE_512KB (19 << SHM_HUGE_SHIFT)
  70. #define SHM_HUGE_1MB (20 << SHM_HUGE_SHIFT)
  71. #define SHM_HUGE_2MB (21 << SHM_HUGE_SHIFT)
  72. #define SHM_HUGE_8MB (23 << SHM_HUGE_SHIFT)
  73. #define SHM_HUGE_16MB (24 << SHM_HUGE_SHIFT)
  74. #define SHM_HUGE_32MB (25 << SHM_HUGE_SHIFT)
  75. #define SHM_HUGE_256MB (28 << SHM_HUGE_SHIFT)
  76. #define SHM_HUGE_512MB (29 << SHM_HUGE_SHIFT)
  77. #define SHM_HUGE_1GB (30 << SHM_HUGE_SHIFT)
  78. #define SHM_HUGE_2GB (31 << SHM_HUGE_SHIFT)
  79. #define SHM_HUGE_16GB (34U << SHM_HUGE_SHIFT)
  80. struct shminfo
  81. {
  82. __syscall_ulong_t shmmax;
  83. __syscall_ulong_t shmmin;
  84. __syscall_ulong_t shmmni;
  85. __syscall_ulong_t shmseg;
  86. __syscall_ulong_t shmall;
  87. __syscall_ulong_t __glibc_reserved1;
  88. __syscall_ulong_t __glibc_reserved2;
  89. __syscall_ulong_t __glibc_reserved3;
  90. __syscall_ulong_t __glibc_reserved4;
  91. };
  92. struct shm_info
  93. {
  94. int used_ids;
  95. __syscall_ulong_t shm_tot; /* total allocated shm */
  96. __syscall_ulong_t shm_rss; /* total resident shm */
  97. __syscall_ulong_t shm_swp; /* total swapped shm */
  98. __syscall_ulong_t swap_attempts;
  99. __syscall_ulong_t swap_successes;
  100. };
  101. #endif /* __USE_MISC */
  102. __END_DECLS