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 8 int 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