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);
}