#include <unistd.h>
#include "khatus_lib_log.h"
+#include "khatus_lib_sensor.h"
#include "khatus_lib_time.h"
#define usage(...) {print_usage(); fprintf(stderr, "Error:\n " __VA_ARGS__); exit(EXIT_FAILURE);}
#define MAX_LEN 20
#define END_OF_MESSAGE '\n'
-char *argv0;
+char *argv0 = NULL;
+
+double opt_interval = 1.0;
+char *opt_fmt = "%a %b %d %H:%M:%S";
+char *fifo_name = NULL;
void
print_usage()
argv0);
}
-int
-main(int argc, char **argv)
+void
+opt_parse(int argc, char **argv)
{
- argv0 = argv[0];
-
- double opt_interval = 1.0;
- char *opt_fmt = "%a %b %d %H:%M:%S";
-
- time_t t;
- struct timespec ti;
- char buf[MAX_LEN];
char c;
- char *fifo_name;
- int fifo_fd = -1;
-
- int n = 0; /* written */
- int r = 0; /* remaining */
- int i = 0; /* buffer position */
-
- signal(SIGPIPE, SIG_IGN); /* Handling manually */
-
- memset(buf, '\0', MAX_LEN);
while ((c = getopt(argc, argv, "f:i:h")) != -1)
switch (c) {
case 'f':
break;
case 'h':
print_usage();
- return 0;
+ exit(EXIT_SUCCESS);
case '?':
if (optopt == 'f' || optopt == 'i')
fprintf(stderr,
fprintf(stderr,
"Unknown option character `\\x%x'.\n",
optopt);
- return 1;
+ exit(EXIT_FAILURE);
default:
assert(0);
}
debug("fifo_name: %s\n", fifo_name);
if (!fifo_name)
usage("No filename was provided\n");
+}
+
+int
+get_time(char *buf, char *fmt)
+{
+ time_t t;
+
+ t = time(NULL);
+ strftime(buf, MAX_LEN, fmt, localtime(&t));
+ return strlen(buf);
+}
+
+int
+main(int argc, char **argv)
+{
+ argv0 = argv[0];
+
+ struct timespec ti;
+ char buf[MAX_LEN];
+
+ opt_parse(argc, argv);
+
+ signal(SIGPIPE, SIG_IGN); /* Handled in loop */
+
+ memset(buf, '\0', MAX_LEN);
ti = timespec_of_float(opt_interval);
- for (;;) {
- debug("openning \"%s\"\n", fifo_name);
- fifo_fd = open(fifo_name, O_WRONLY);
- if (fifo_fd < 0)
- fatal("Failed to open FIFO file: \"%s\". Error: %s\n",
- fifo_name,
- strerror(errno));
- debug("openned. fd: %d\n", fifo_fd);
- t = time(NULL);
- strftime(buf, MAX_LEN, opt_fmt, localtime(&t));
- r = strlen(buf);
- buf[r] = END_OF_MESSAGE;
- for (i = 0; (n = write(fifo_fd, buf + i++, 1)) && r; r--)
- ;
- if (n < 0)
- fatal("Failed to write to %s. Err num: %d, Err msg: %s\n",
- fifo_name,
- errno,
- strerror(errno));
- if (close(fifo_fd) < 0)
- fatal("Failed to close %s. Err num: %d, Err msg: %s\n",
- fifo_name,
- errno,
- strerror(errno));
- fifo_fd = -1;
- debug("closed. fd: %d\n", fifo_fd);
- snooze(&ti);
- }
+ loop(
+ &ti,
+ fifo_name,
+ buf,
+ (SENSOR_FUN_T) get_time,
+ (SENSOR_PARAMS_T) opt_fmt
+ );
return EXIT_SUCCESS;
}