Messi gli esempi nel testo e usata daemon dove serve nei server
[gapil.git] / sources / DirMonitor.c
index 2f11833..c9b92f4 100644 (file)
@@ -25,7 +25,7 @@
  *
  * Author: S. Piccardi Jan. 2003
  *
- * $Id: DirMonitor.c,v 1.4 2003/01/10 09:28:49 piccardi Exp $
+ * $Id: DirMonitor.c,v 1.5 2003/01/12 00:24:28 piccardi Exp $
  *
  *****************************************************************************/
 #include <sys/types.h>
@@ -54,8 +54,7 @@ struct DirProp {
     int tot_block;   
     int tot_char;    
     int tot_sock;
-};
-struct DirProp *shmptr;
+} *shmptr;
 int shmid; 
 int mutex;
 
@@ -99,11 +98,14 @@ int main(int argc, char *argv[])
        printf("Wrong number of arguments %d\n", argc - optind);
         usage();
     }
+    if (chdir(argv[1])) {                      /* chdir to be sure dir exist */
+       perror("Cannot find directory to monitor");
+       exit(1);
+    }
     Signal(SIGTERM, HandSIGTERM);            /* set handlers for termination */
     Signal(SIGINT, HandSIGTERM);
     Signal(SIGQUIT, HandSIGTERM);
-    /* create needed IPC objects */
-    key = ftok("./DirMonitor.c", 1);                         /* define a key */
+    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) {
        perror("Cannot create shared memory");
@@ -111,12 +113,14 @@ int main(int argc, char *argv[])
     }
     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);
     }
     /* main loop, monitor directory properties each 10 sec */
+    daemon(1, 0);              /* demonize process, staying in monitored dir */
     while (1) {
        MutexLock(mutex);                              /* lock shared memory */
        memset(shmptr, 0, sizeof(struct DirProp));    /* erase previous data */