1/* Tests simple manipulation with a shared memory segment. */
2
3#include <stdio.h>
4#include <sys/shm.h>
5
6#define SEGMENT_SIZE 167
7
8int main(int argc, const char *argv[])
9{
10   int shmid = shmget(IPC_PRIVATE, SEGMENT_SIZE, IPC_CREAT | SHM_R | SHM_W);
11   if (shmid < 0) {
12      perror("shmget()");
13      return 1;
14   }
15
16   void *addr = shmat(shmid, NULL, 0);
17   if (addr == (void *) -1) {
18      perror("shmat()");
19      return 2;
20   }
21
22   struct shmid_ds stats;
23   int ret = shmctl(shmid, IPC_STAT, &stats);
24   if (ret != 0) {
25      perror("shmctl(IPC_STAT)");
26      return 3;
27   }
28
29   printf("segment size: %zu\n", stats.shm_segsz);
30
31   ret = shmdt(addr);
32   if (ret != 0) {
33      perror("shmdt()");
34      return 4;
35   }
36
37   ret = shmctl(shmid, IPC_RMID, NULL);
38   if (ret != 0) {
39      perror("shmctl(IPC_RMID)");
40      return 5;
41   }
42
43   return 0;
44}
45