Inizio descrizione programma di monitoraggio del messaggio su memoria
[gapil.git] / sources / message_getter.c
index 3c94b2d4bc46cf845fb58e45a420769fcf4a2884..5ffba091b1a1c1a2b4910b026bc0194e70cb9fda 100644 (file)
  */
 /* Help printing routine */
 void usage(void);
+void HandSigInt(int sig);
 
 #define MSGMAXSIZE 256
+char *shmname = "messages";
+char *semname = "messages";
 
 int main(int argc, char *argv[]) 
 {
     int i;
     sem_t * sem;
-    time_t t;
-    char *shmname = "messages";
-    char *semname = "messages";
-    char * res;
     void * shm_ptr;
+    time_t t;
     /*
      * Input section: decode command line parameters 
      * Use getopt function
@@ -92,8 +92,8 @@ int main(int argc, char *argv[])
        printf("Wrong number of arguments %d\n", argc - optind);
         usage();
     }
+    Signal(SIGINT, HandSigInt);
     // Get shared memory segment
-    RemoveShm(shmname);
     shm_ptr = CreateShm(shmname, MSGMAXSIZE, 0666, 0);
     if ( shm_ptr == NULL) {
        perror("Cannot find shared memory");
@@ -110,14 +110,13 @@ int main(int argc, char *argv[])
     if ( sem_getvalue(sem, &i) != 0) {
        perror("cannot get initial semaphore value");
        exit(1);
-    } else {
-       if (i == 0) {
+    } else 
+       if (i == 0)
            if ( sem_post(sem) != 0) {
                perror("cannot do semaphore initial release");
                exit(1);
            }
-       }
-    }   
+    // main loop
     while(1) {
        // acquire semaphore
        if ( sem_wait(sem) != 0) {
@@ -150,3 +149,10 @@ void usage(void) {
     printf("  -s semname   use semname semaphore\n");
     exit(1);
 }
+
+void HandSigInt(int sig)
+{
+    RemoveShm(shmname);
+    sem_unlink(semname);
+    exit(0);
+}