diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2023-07-16 14:50:53 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2023-07-16 14:50:53 +0200 |
| commit | 33c54437949aaefacc3326a1c2d577db072cbacd (patch) | |
| tree | 985241d4701cf57a8c7912a3a97ebe3bf1acc00d | |
| parent | e0fdde7cd04550e6a13aa626d2ef6517bf6e5608 (diff) | |
Minor changes
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | src/logger.c | 12 | ||||
| -rw-r--r-- | src/publisher.c | 14 | ||||
| -rw-r--r-- | src/subscriber.c | 15 |
4 files changed, 37 insertions, 6 deletions
@@ -20,12 +20,12 @@ logger: src/logger.c src/utils.c config.mk $(CC) $(filter-out config.mk,$^) -o $@ $(MACROS) publish: publisher logger - [ -f pid ] && { kill $(shell cat pid); rm pid; } for client in $$(basename -a /home/loic/registers/*); \ do \ ./logger $(LOGGERS_DIR) $$client $(LOG_INTERVAL) &> logger_$${client}.log & echo $$! >> pid; \ done ./publisher $(LOGGERS_DIR) $(LOG_INTERVAL) $(SUBSCRIBER_ADDR) $(ZMQ_PORT) $(KEY) + [ -f pid ] && { kill -INT $(shell cat pid); rm pid; } subscribe: subscriber ./subscriber $(ZMQ_PORT) $(SUBSCRIBER_DIR) diff --git a/src/logger.c b/src/logger.c index 4e9aee9..842aec7 100644 --- a/src/logger.c +++ b/src/logger.c @@ -8,6 +8,7 @@ #include <sys/stat.h> #include "utils.h" #include <time.h> +#include <signal.h> #ifndef LOGGER_DELAY #define LOGGER_DELAY 0 @@ -18,6 +19,14 @@ char *__client; char __logdir[STATIC_LEN]; char __regpower[STATIC_LEN]; int __loginterval; +unsigned char __stop=0; + +void sighandler(int signo){ + if (signo == SIGINT){ + printf("Stopping...\n"); + __stop=1; + } +} int main (int argc, char *argv []) { @@ -41,6 +50,7 @@ int main (int argc, char *argv []) strcat(__regpower,INA260_POWER_REGISTER); //----- Sanity checks + signal(SIGINT,sighandler); mkdirp(__logdir); if(__loginterval<MIN_INTERVAL){ printf("Log interval is too small (min=%ds)\n",MIN_INTERVAL); @@ -62,7 +72,7 @@ int main (int argc, char *argv []) time_t interval; struct timespec power_ts; - while(1){ + while(!__stop){ interval=INTERVAL(__loginterval); *logfilepath='\0'; sprintf(logfilepath,"%s/%ld",__logdir,interval); diff --git a/src/publisher.c b/src/publisher.c index f826f3b..3e41d86 100644 --- a/src/publisher.c +++ b/src/publisher.c @@ -2,6 +2,7 @@ #include <assert.h> #include <time.h> #include <dirent.h> +#include <signal.h> #include "utils.h" @@ -12,9 +13,17 @@ char *__interface; char *__ip; int __loginterval; int __port; +unsigned char __stop=0; void publish(void *publisher, char *filepath, char* client, long int interval); +void sighandler(int signo){ + if (signo == SIGINT){ + printf("Stopping...\n"); + __stop=1; + } +} + int main (int argc, char *argv []) { if(argc != 6){ @@ -30,6 +39,7 @@ int main (int argc, char *argv []) __key=argv[5]; //----- Sanity checks + signal(SIGINT,sighandler); if(__loginterval<MIN_INTERVAL){ printf("Log interval is too small (min=%ds)\n",MIN_INTERVAL); exit(2); @@ -48,7 +58,7 @@ int main (int argc, char *argv []) //----- Start publisher struct dirent *de; // Pointer for directory entry - while(1){ + while(!__stop){ int interval=INTERVAL(__loginterval); int interval_next=INTERVAL_NEXT(__loginterval); DIR *dr = opendir(__logdir); @@ -63,7 +73,7 @@ int main (int argc, char *argv []) // As long as next logfile is not available, we should wait // for sending the current one printf("Waiting for %s logger measurements...\n",client); - while(!FILE_EXISTS(logfile_next)){ + while(!FILE_EXISTS(logfile_next) && (!__stop)){ sleep(1); } // Send current one diff --git a/src/subscriber.c b/src/subscriber.c index 2f8dd2a..27c9441 100644 --- a/src/subscriber.c +++ b/src/subscriber.c @@ -2,9 +2,17 @@ #include <assert.h> #include <time.h> #include <string.h> - +#include <signal.h> #include "utils.h" +unsigned char __stop=0; +void sighandler(int signo){ + if (signo == SIGINT){ + printf("Stopping...\n"); + __stop=1; + } +} + int main (int argc, char *argv []) { if(argc != 3){ @@ -18,6 +26,7 @@ int main (int argc, char *argv []) //----- Various inits mkdirp(cdatadir); + signal(SIGINT,sighandler); //----- Init ZMQ void *context = zmq_ctx_new (); @@ -35,8 +44,10 @@ int main (int argc, char *argv []) //----- Listen char buffer[ZMQ_MSG_SIZE]; int size; - while(1){ + while(!__stop){ size=zmq_recv (subscriber, buffer, ZMQ_MSG_SIZE-1, 0); + if(size<=0) + continue; buffer[size < ZMQ_MSG_SIZE ? size : ZMQ_MSG_SIZE - 1] = '\0'; //----- Read buffer char *token = strtok(buffer, "\n"); |
