/* Tests simple manipulation with a shared memory segment. */
#include <stdio.h>
#include <sys/shm.h>
#define SEGMENT_SIZE 167
int main(int argc, const char *argv[])
{
int shmid = shmget(IPC_PRIVATE, SEGMENT_SIZE, IPC_CREAT | SHM_R | SHM_W);
if (shmid < 0) {
perror("shmget()");
return 1;
}
void *addr = shmat(shmid, NULL, 0);
if (addr == (void *) -1) {
perror("shmat()");
return 2;
}
struct shmid_ds stats;
int ret = shmctl(shmid, IPC_STAT, &stats);
if (ret != 0) {
perror("shmctl(IPC_STAT)");
return 3;
}
printf("segment size: %zu\n", stats.shm_segsz);
ret = shmdt(addr);
if (ret != 0) {
perror("shmdt()");
return 4;
}
ret = shmctl(shmid, IPC_RMID, NULL);
if (ret != 0) {
perror("shmctl(IPC_RMID)");
return 5;
}
return 0;
}