shmxt.c revision 6c69ed7ac54b7a7570227f3691d25e53e8318d19
1#include "tests.h" 2#include <stdio.h> 3#include <stdlib.h> 4#include <sys/shm.h> 5 6static int id = -1; 7 8static void 9cleanup(void) 10{ 11 shmctl(id, IPC_RMID, NULL); 12 id = -1; 13} 14 15#ifdef __alpha__ 16# define SHMAT "osf_shmat" 17#else 18# define SHMAT "shmat" 19#endif 20 21int 22main(void) 23{ 24 id = shmget(IPC_PRIVATE, 1, 0600); 25 if (id < 0) 26 perror_msg_and_skip("shmget"); 27 atexit(cleanup); 28 29 shmat(id, NULL, SHM_REMAP); 30 printf("%s(%d, NULL, SHM_REMAP) = -1 %s (%m)\n", 31 SHMAT, id, errno2name()); 32 33 void *shmaddr = shmat(id, NULL, SHM_RDONLY); 34 if (shmaddr == (void *)(-1)) 35 perror_msg_and_skip("shmat SHM_RDONLY"); 36 printf("%s(%d, NULL, SHM_RDONLY) = %p\n", SHMAT, id, shmaddr); 37 38 if (shmdt(shmaddr)) 39 perror_msg_and_skip("shmdt"); 40 printf("shmdt(%p) = 0\n", shmaddr); 41 42 ++shmaddr; 43 void *shmaddr2 = shmat(id, shmaddr, SHM_RND); 44 if (shmaddr2 == (void *)(-1)) 45 printf("%s(%d, %p, SHM_RND) = -1 %s (%m)\n", 46 SHMAT, id, shmaddr, errno2name()); 47 else 48 printf("%s(%d, %p, SHM_RND) = %p\n", 49 SHMAT, id, shmaddr, shmaddr2); 50 51 puts("+++ exited with 0 +++"); 52 return 0; 53} 54