Roba rimasta indietro
[gapil.git] / listati / message_getter.c
1 void HandSigInt(int sig);
2 #define MSGMAXSIZE 256
3 char *shmname = "messages";
4 char *semname = "messages";
5
6 int main(int argc, char *argv[]) 
7 {
8     sem_t * sem, void * shm_ptr, time_t t;
9     ...
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");
14         exit(1);
15     }
16     // get a locked semaphore
17     if ((sem = sem_open(semname, O_CREAT|O_EXCL, 0666, 0)) == SEM_FAILED) {
18         perror("Cannot open semaphore");
19         exit(1);
20     }
21     // set initial string
22     strncpy((char *) shm_ptr, argv[optind], MSGMAXSIZE);
23     // do initial release
24     if (sem_post(sem) != 0) {
25         perror("cannot do semaphore initial release");
26         exit(1);
27     }
28     // main loop
29     while(1) {
30         if (sem_getvalue(sem, &i) !=0) {             // get sem values
31             perror("cannot get semaphore value");
32             exit(1);
33         }
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");
39             exit(1);
40         }
41         printf("message: %s\n", (char *) shm_ptr );  // print message
42         if (sem_post(sem) != 0) {                    // release semaphore
43             perror("cannot release semaphore");
44             exit(1);
45         }
46         sleep(1);
47    }
48 exit(0);    
49 }