Added option -o

This commit is contained in:
hjp 2005-04-22 13:42:10 +00:00
parent a52fa0d688
commit cf51e84792
1 changed files with 38 additions and 8 deletions

46
ts/ts.c
View File

@ -3,11 +3,13 @@
#include <sys/time.h> #include <sys/time.h>
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#include <string.h>
#include <errno.h>
static char *cmnd; static char *cmnd;
static void usage(void) { static void usage(void) {
fprintf(stderr, "Usage: %s [-u]\n", cmnd); fprintf(stderr, "Usage: %s [-u] [-o file]\n", cmnd);
exit(1); exit(1);
} }
@ -16,36 +18,64 @@ int main(int argc, char **argv) {
int c; int c;
int use_microseconds = 0; int use_microseconds = 0;
int print_ts = 1; int print_ts = 1;
char lastfile[FILENAME_MAX] = "", file[FILENAME_MAX] = "";
char *filepat = NULL;
FILE *fp = NULL;
cmnd = argv[0]; cmnd = argv[0];
setlinebuf(stdout); while ((c = getopt(argc, argv, "uo:")) != EOF) {
while ((c = getopt(argc, argv, "u")) != EOF) {
switch (c) { switch (c) {
case 'u': case 'u':
use_microseconds = 1; use_microseconds = 1;
break; break;
case 'o':
filepat = optarg;
break;
default: default:
usage(); usage();
} }
} }
if (!filepat) {
fp = stdout;
setlinebuf(fp);
}
while ((c = getchar()) != EOF) { while ((c = getchar()) != EOF) {
if (print_ts) { if (print_ts) {
struct timeval tv; struct timeval tv;
char s[sizeof("yyyy-mm-ddThh:mm:ss")]; char s[sizeof("yyyy-mm-ddThh:mm:ss")];
gettimeofday(&tv, NULL); gettimeofday(&tv, NULL);
if (filepat) {
strftime(file, sizeof(file), filepat,
localtime(&tv.tv_sec));
if (strcmp(lastfile, file) != 0) {
if (fp) {
if (fclose(fp) == EOF) {
fprintf(stderr, "%s: cannot close %s: %s\n", argv[0], lastfile, strerror(errno));
exit(1);
}
}
if ((fp = fopen(file, "w")) == NULL) {
fprintf(stderr, "%s: cannot open %s: %s\n", argv[0], file, strerror(errno));
exit(1);
}
setlinebuf(fp);
strcpy(lastfile, file);
}
}
strftime(s, sizeof(s), "%Y-%m-%dT%H:%M:%S", strftime(s, sizeof(s), "%Y-%m-%dT%H:%M:%S",
localtime(&tv.tv_sec)); localtime(&tv.tv_sec));
fputs(s, stdout); fputs(s, fp);
if (use_microseconds) { if (use_microseconds) {
printf(".%06ld ", (long)tv.tv_usec); fprintf(fp, ".%06ld ", (long)tv.tv_usec);
} }
putchar(' '); putc(' ', fp);
print_ts = 0; print_ts = 0;
} }
putchar(c); putc(c, fp);
if (c == '\n') print_ts = 1; if (c == '\n') print_ts = 1;
} }
if (!print_ts) putchar('\n'); // force newline at end of output if (!print_ts) putc('\n', fp); // force newline at end of output
return 0; return 0;
} }