#include <assert.h>
#include <ctype.h>
#include <errno.h>
-#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
double opt_interval = 1.0;
char *opt_fmt = "%a %b %d %H:%M:%S";
-char *fifo_name = NULL;
void
print_usage()
{
printf(
- "%s: [OPT ...] FIFO\n"
+ "%s: [OPT ...]\n"
"\n"
- "FIFO = string # path to fifo file\n"
"OPT = -i int # interval\n"
" | -f string # format string\n"
" | -h # help message (i.e. what you're reading now :) )\n",
default:
assert(0);
}
- fifo_name = argv[optind];
- debug("fifo_name: %s\n", fifo_name);
- if (!fifo_name)
- usage("No filename was provided\n");
}
int
struct timespec ti;
char buf[MAX_LEN];
- int fd = -1;
-
- int n = 0; /* written */
- int r = 0; /* remaining */
- int i = 0; /* buffer position */
-
opt_parse(argc, argv);
-
- signal(SIGPIPE, SIG_IGN); /* Handling manually */
-
- memset(buf, '\0', MAX_LEN);
ti = timespec_of_float(opt_interval);
+ debug("opt_fmt: \"%s\"\n", opt_fmt);
+ debug("opt_interval: %f\n", opt_interval);
+ debug("ti: {tv_sec = %ld, tv_nsec = %ld}\n", ti.tv_sec, ti.tv_nsec);
+ memset(buf, '\0', MAX_LEN);
+ signal(SIGPIPE, SIG_IGN);
+
for (;;) {
- debug("openning \"%s\"\n", fifo_name);
- fd = open(fifo_name, O_WRONLY);
- if (fd < 0)
- fatal("Failed to open FIFO file: \"%s\". Error: %s\n",
- fifo_name,
- strerror(errno));
- debug("openned. fd: %d\n", 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(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(fd) < 0)
- fatal("Failed to close %s. Err num: %d, Err msg: %s\n",
- fifo_name,
- errno,
- strerror(errno));
- fd = -1;
- debug("closed. fd: %d\n", fd);
+ puts(buf);
+ fflush(stdout);
snooze(&ti);
}
return EXIT_SUCCESS;