Merge branch 'master' of ssh://gapil.gnulinux.it/srv/git/gapil
[gapil.git] / sources / DirMonitor.c
index c9b92f43ab2bf8245a8ff5a2a1d6c7bdd311a4d0..aece529fcef7c3302aa62e3cb160e80f18fc48fe 100644 (file)
  *
  * Author: S. Piccardi Jan. 2003
  *
- * $Id: DirMonitor.c,v 1.5 2003/01/12 00:24:28 piccardi Exp $
- *
  *****************************************************************************/
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>        /* directory */
-#include <stdlib.h>        /* C standard library */
-#include <unistd.h>
+#include <sys/types.h>   /* primitive system data types */
+#include <sys/stat.h>    /* file characteristics constants and functions */
+#include <dirent.h>      /* directory operation constants and functions */
+#include <stdlib.h>      /* C standard library */
+#include <unistd.h>      /* unix standard library */
+#include <string.h>     /* C strings library */
 
 #include "Gapil.h"
 #include "macros.h"
 
 /* Help printing routine */
 void usage(void);
-/* computation function for DirScan */
+/* computation function for dir_scan */
 int ComputeValues(struct dirent * direntry);
 void HandSIGTERM(int signo);
 
@@ -55,13 +54,12 @@ struct DirProp {
     int tot_char;    
     int tot_sock;
 } *shmptr;
-int shmid; 
+key_t key;
 int mutex;
 
 int main(int argc, char *argv[]) 
 {
     int i, pause = 10;
-    key_t key;
     /*
      * Input section: decode command line parameters 
      * Use getopt function
@@ -106,15 +104,11 @@ int main(int argc, char *argv[])
     Signal(SIGINT, HandSIGTERM);
     Signal(SIGQUIT, HandSIGTERM);
     key = ftok("~/gapil/sources/DirMonitor.c", 1);  /* define a key, use dir */
-    shmid = shmget(key, 4096, IPC_CREAT|0666);        /* get a shared memory */
-    if (shmid < 0) {
+    shmptr = ShmCreate(key, 4096, 0666, 0);   /* get a shared memory segment */
+    if (!shmptr) {
        perror("Cannot create shared memory");
        exit(1);
     }
-    if ( (shmptr = shmat(shmid, NULL, 0)) == NULL ) {   /* attach to process */
-       perror("Cannot attach segment");
-       exit(1);
-    }
     if ((mutex = MutexCreate(key)) == -1) {                   /* get a Mutex */
        perror("Cannot create mutex");
        exit(1);
@@ -124,13 +118,13 @@ int main(int argc, char *argv[])
     while (1) {
        MutexLock(mutex);                              /* lock shared memory */
        memset(shmptr, 0, sizeof(struct DirProp));    /* erase previous data */
-       DirScan(argv[1], ComputeValues);                     /* execute scan */
+       dir_scan(argv[1], ComputeValues);                    /* execute scan */
        MutexUnlock(mutex);                          /* unlock shared memory */
        sleep(pause);                              /* sleep until next watch */
     }
 }
 /*
- * Routine to compute directory properties inside DirScan
+ * Routine to compute directory properties inside dir_scan
  */
 int ComputeValues(struct dirent * direntry) 
 {
@@ -164,14 +158,7 @@ void usage(void) {
 void HandSIGTERM(int signo) {
     MutexLock(mutex);
     debug("Terminated by %s\n", strsignal(signo));
-    if (shmdt(shmptr)) {
-       perror("Error detaching shared memory");
-       exit(1);
-    }
-    if (shmctl(shmid, IPC_RMID, NULL)) {
-       perror("Cannot remove shared memory segment");
-       exit(1);
-    }
+    ShmRemove(key, shmptr);
     MutexRemove(mutex);
     exit(0);
 }