X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sources%2FDirMonitor.c;h=c9b92f43ab2bf8245a8ff5a2a1d6c7bdd311a4d0;hp=7e6b2884ee7866b3e666c702420266e4f1337c16;hb=59b107d5207f19e0049bbd1032e10cba660da92e;hpb=b8248eaf35d824e8816c76ad9f9561c76d67b915 diff --git a/sources/DirMonitor.c b/sources/DirMonitor.c index 7e6b288..c9b92f4 100644 --- a/sources/DirMonitor.c +++ b/sources/DirMonitor.c @@ -25,7 +25,7 @@ * * Author: S. Piccardi Jan. 2003 * - * $Id: DirMonitor.c,v 1.2 2003/01/04 17:24:30 piccardi Exp $ + * $Id: DirMonitor.c,v 1.5 2003/01/12 00:24:28 piccardi Exp $ * *****************************************************************************/ #include @@ -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 */ @@ -126,7 +130,7 @@ int main(int argc, char *argv[]) } } /* - * Routine to print file name and size inside DirScan + * Routine to compute directory properties inside DirScan */ int ComputeValues(struct dirent * direntry) { @@ -137,10 +141,10 @@ int ComputeValues(struct dirent * direntry) if (S_ISREG(data.st_mode)) shmptr->tot_regular++; if (S_ISFIFO(data.st_mode)) shmptr->tot_fifo++; if (S_ISLNK(data.st_mode)) shmptr->tot_link++; - if (S_ISDIR(data.st_mode)) shmptr->tot_dir; - if (S_ISBLK(data.st_mode)) shmptr->tot_block; - if (S_ISCHR(data.st_mode)) shmptr->tot_char; - if (S_ISSOCK(data.st_mode)) shmptr->tot_sock; + if (S_ISDIR(data.st_mode)) shmptr->tot_dir++; + if (S_ISBLK(data.st_mode)) shmptr->tot_block++; + if (S_ISCHR(data.st_mode)) shmptr->tot_char++; + if (S_ISSOCK(data.st_mode)) shmptr->tot_sock++; return 0; } /*