1 void HandSigInt(int sig);
3 char *shmname = "messages";
4 char *semname = "messages";
6 int main(int argc, char *argv[])
8 sem_t * sem, void * shm_ptr, time_t t;
10 Signal(SIGINT, HandSigInt);
11 // get a shared memory segment
12 if ((shm_ptr = CreateShm(shmname, MSGMAXSIZE, 0666, 0)) == NULL) {
13 perror("Cannot find shared memory");
16 // get a locked semaphore
17 if ((sem = sem_open(semname, O_CREAT|O_EXCL, 0666, 0)) == SEM_FAILED) {
18 perror("Cannot open semaphore");
22 strncpy((char *) shm_ptr, argv[optind], MSGMAXSIZE);
24 if (sem_post(sem) != 0) {
25 perror("cannot do semaphore initial release");
30 if (sem_getvalue(sem, &i) !=0) { // get sem values
31 perror("cannot get semaphore value");
34 printf("sem=%i, ", i); // print sem values
35 t = time(NULL); // get time
36 printf("%s", ctime(&t)); // print time
37 if (sem_wait(sem) != 0) { // acquire semaphore
38 perror("cannot use semaphore");
41 printf("message: %s\n", (char *) shm_ptr ); // print message
42 if (sem_post(sem) != 0) { // release semaphore
43 perror("cannot release semaphore");