diff rvinterf/rvtdump.c @ 134:e0d56e9be8a2

rvtdump: time-stamped logging implemented
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sat, 02 Nov 2013 23:15:42 +0000
parents 56b53c289785
children e01e3a60c858
line wrap: on
line diff
--- a/rvinterf/rvtdump.c	Sat Nov 02 22:24:14 2013 +0000
+++ b/rvinterf/rvtdump.c	Sat Nov 02 23:15:42 2013 +0000
@@ -8,12 +8,17 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
+#include <time.h>
 
 extern int target_fd;
 extern char *baudrate_name;
 
 extern char pr_item[];
 
+char *logfname;
+FILE *logF;
+time_t logtime;
+
 main(argc, argv)
 	char **argv;
 {
@@ -22,7 +27,7 @@
 	int c;
 	fd_set fds;
 
-	while ((c = getopt(argc, argv, "b:d:")) != EOF)
+	while ((c = getopt(argc, argv, "b:d:l:")) != EOF)
 		switch (c) {
 		case 'b':
 			baudrate_name = optarg;
@@ -30,6 +35,9 @@
 		case 'd':
 			target_fd = atoi(optarg);
 			continue;
+		case 'l':
+			logfname = optarg;
+			continue;
 		case '?':
 		default:
 usage:			fprintf(stderr,
@@ -44,10 +52,20 @@
 
 	set_serial_nonblock(0);
 	setlinebuf(stdout);
+	if (logfname) {
+		logF = fopen(logfname, "w");
+		if (!logF) {
+			perror(logfname);
+			exit(1);
+		}
+		fprintf(logF, "*** Log of decoded RVT output ***\n");
+		setlinebuf(logF);
+	}
 	for (;;) {
 		FD_ZERO(&fds);
 		FD_SET(target_fd, &fds);
 		c = select(target_fd+1, &fds, 0, 0, 0);
+		time(&logtime);
 		if (c < 0) {
 			if (errno == EINTR)
 				continue;
@@ -67,4 +85,6 @@
 print_item()
 {
 	printf("%s\n", pr_item);
+	if (logF)
+		log_item();
 }