Hi all, Add a '-m' monotonic clock option
Index: ts.1 =================================================================== RCS file: /cvs/src/usr.bin/ts/ts.1,v retrieving revision 1.1 diff -u -p -r1.1 ts.1 --- ts.1 29 Jun 2022 08:39:49 -0000 1.1 +++ ts.1 29 Jun 2022 09:15:29 -0000 @@ -23,6 +23,7 @@ .Sh SYNOPSIS .Nm ts .Op Fl i | s +.Op Fl m .Op Ar format .Sh DESCRIPTION When invoked, the @@ -33,6 +34,8 @@ The options are as follows: .Bl -tag -width Ds .It Fl i Display time elapsed since the last timestamp. +.It Fl m +Use the system's monotonic clock. .It Fl s Display time elapsed since the start of the program. .El Index: ts.c =================================================================== RCS file: /cvs/src/usr.bin/ts/ts.c,v retrieving revision 1.1 diff -u -p -r1.1 ts.c --- ts.c 29 Jun 2022 08:39:49 -0000 1.1 +++ ts.c 29 Jun 2022 09:15:29 -0000 @@ -42,21 +42,27 @@ main(int argc, char *argv[]) int ch, prev; struct timespec start, now, elapsed; struct tm *lt, tm; + int clock = CLOCK_REALTIME; if (pledge("stdio", NULL) == -1) err(1, "pledge"); iflag = sflag = 0; - while ((ch = getopt(argc, argv, "is")) != -1) { + while ((ch = getopt(argc, argv, "ims")) != -1) { switch (ch) { case 'i': iflag = 1; format = "%H:%M:%S"; + clock = CLOCK_MONOTONIC; + break; + case 'm': + clock = CLOCK_MONOTONIC; break; case 's': sflag = 1; format = "%H:%M:%S"; + clock = CLOCK_MONOTONIC; break; default: usage(); @@ -85,18 +91,17 @@ main(int argc, char *argv[]) for (prev = '\n'; (ch = getchar()) != EOF; prev = ch) { if (prev == '\n') { + if (clock_gettime(clock, &now)) + err(1, "clock_gettime"); if (iflag || sflag) { - if (clock_gettime(CLOCK_MONOTONIC, &now)) - err(1, "clock_gettime"); timespecsub(&now, &start, &elapsed); if (gmtime_r(&elapsed.tv_sec, &tm) == NULL) err(1, "gmtime_r"); if (iflag) - clock_gettime(CLOCK_MONOTONIC, &start); + if (clock_gettime(clock, &start)) + err(1, "clock_gettime"); fmtfmt(&tm, elapsed.tv_nsec); } else { - if (clock_gettime(CLOCK_REALTIME, &now)) - err(1, "clock_gettime"); lt = localtime(&now.tv_sec); if (lt == NULL) err(1, "localtime"); @@ -115,7 +120,7 @@ main(int argc, char *argv[]) static void __dead usage(void) { - fprintf(stderr, "usage: %s [-i | -s] [format]\n", getprogname()); + fprintf(stderr, "usage: %s [-i | -s] [-m] [format]\n", getprogname()); exit(1); }