1 #include <stdlib.h>
2 #include <sys/shm.h>
3 #include <errno.h>
5 char * p= NULL;
6 main(int argc, char * argv[])
7 {
8 int fd;
9 int op=0;
10 int name = 0xfeed;
11 int err;
12 if (argc<3) {printf("shmtest (c[reate]| d[delete]| o[open]) key\n"); exit(1);}
15 switch (argv[1][0])
16 {
17 case 'D':
18 case 'd':
19 op =2; //delete
20 break;
21 case 'c':
22 case 'C':
23 op =0; //create
24 break;
25 case 'o':
26 case 'O':
27 op =1; //open
28 break;
29 default:
30 printf(" unknown op code %c. Need d, o, or c\n", argv[1][0]);
31 exit(1);
32 break;
33 }
35 name = atoi(argv[2]); printf("key = %d op=%d\n", name,op);
36 switch (op)
37 {
38 case(1): /* open */
39 default:
40 fd = shmget( (key_t) name, 100000, 0666 );
41 if (fd <0) {
42 perror(" shget open failed\n");
43 exit( 1);
44 }
45 break;
47 case(0): /* create */
48 fd = shmget(name, 100000, IPC_CREAT | 0666 );
49 if (fd<0) {perror(" shget create failed , exiting "); exit(1);}
50 break;
52 case(2):
53 fd = shmget( (key_t) name, 100000, 0666 );
54 if (fd <0) {
55 perror(" delete: shget open failed\n");
56 exit( 1);
57 }
58 err=shmctl(fd, IPC_RMID, 0);
59 if(err<0) {perror("ctl failed: ");}
60 exit( 0); //all we do
61 break;
62 }
64 /* map into us */
65 p = shmat(fd, 0, 0);
66 if (p == -1) {
67 perror("shmat failed\n"); exit(1);
68 }
69 else {printf("mapped to %x\n",p);}
71 if (op==1) { printf("got something: %s\n", p);}
72 else if(op==0)
73 {
74 sprintf(p,"created some shared memory, key=%d...\n",name);
75 printf("creating shm ok: %s",p);
76 }
78 }