summaryrefslogtreecommitdiffstats
path: root/usr.bin/lastcomm
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2012-05-17 11:10:13 +0000
committerkib <kib@FreeBSD.org>2012-05-17 11:10:13 +0000
commit8f04882e813fa954297b81d08c8c32c235b2e7ae (patch)
tree87c6a7767f29607fb05e55b73994d30ecc853db6 /usr.bin/lastcomm
parent6e55e4c37b1234d85faf78d185ca3eefc6df3a41 (diff)
downloadFreeBSD-src-8f04882e813fa954297b81d08c8c32c235b2e7ae.zip
FreeBSD-src-8f04882e813fa954297b81d08c8c32c235b2e7ae.tar.gz
Allow to specify strftime(3) format for process start end exit times.
Submitted by: Andrey Zonov <andrey zonov org> MFC after: 1 week
Diffstat (limited to 'usr.bin/lastcomm')
-rw-r--r--usr.bin/lastcomm/lastcomm.113
-rw-r--r--usr.bin/lastcomm/lastcomm.c28
2 files changed, 36 insertions, 5 deletions
diff --git a/usr.bin/lastcomm/lastcomm.1 b/usr.bin/lastcomm/lastcomm.1
index 77a49ab..10ee896 100644
--- a/usr.bin/lastcomm/lastcomm.1
+++ b/usr.bin/lastcomm/lastcomm.1
@@ -28,7 +28,7 @@
.\" From: @(#)lastcomm.1 8.1 (Berkeley) 6/6/93
.\" $FreeBSD$
.\"
-.Dd May 14, 2007
+.Dd May 17, 2012
.Dt LASTCOMM 1
.Os
.Sh NAME
@@ -38,6 +38,7 @@
.Nm
.Op Fl EScesu
.Op Fl f Ar file
+.Op Cm + Ns Ar format
.Op Ar command ...\&
.Op Ar user ...\&
.Op Ar terminal ...\&
@@ -77,6 +78,15 @@ is a single dash
reads accounting entries from the standard input.
.El
.Pp
+An operand with a leading plus sign
+.Pq Sq +
+is followed a user-defined format string which specifies the format
+in which to display the process's start or exit date and time.
+The format string may contain any of the conversion specifications
+described in the
+.Xr strftime 3
+manual page, as well as arbitrary text.
+.Pp
If no options are specified,
.Fl cS
is assumed.
@@ -165,6 +175,7 @@ will print details of each terminating command.
.Sh SEE ALSO
.Xr last 1 ,
.Xr sigaction 2 ,
+.Xr strftime 3 ,
.Xr acct 5 ,
.Xr core 5
.Sh HISTORY
diff --git a/usr.bin/lastcomm/lastcomm.c b/usr.bin/lastcomm/lastcomm.c
index e140c70..b2a0f0f 100644
--- a/usr.bin/lastcomm/lastcomm.c
+++ b/usr.bin/lastcomm/lastcomm.c
@@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$");
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include <unistd.h>
#include "pathnames.h"
@@ -82,10 +83,12 @@ main(int argc, char *argv[])
int (*readrec)(FILE *f, struct acctv2 *av2);
time_t t;
int ch, rv;
- const char *acctfile;
+ const char *acctfile, *format;
+ char buf[1024];
int flags = 0;
acctfile = _PATH_ACCT;
+ format = NULL;
while ((ch = getopt(argc, argv, "f:usecSE")) != -1)
switch((char)ch) {
case 'f':
@@ -126,6 +129,12 @@ main(int argc, char *argv[])
argc -= optind;
argv += optind;
+ if (argc > 0 && **argv == '+') {
+ format = *argv + 1; /* skip + */
+ argc--;
+ argv++;
+ }
+
if (strcmp(acctfile, "-") == 0) {
fp = stdin;
readrec = readrec_forward;
@@ -177,14 +186,24 @@ main(int argc, char *argv[])
/* starting time */
if (flags & AC_BTIME) {
- (void)printf(" %.16s", ctime(&ab.ac_btime));
+ if (format != NULL) {
+ (void)strftime(buf, sizeof(buf), format,
+ localtime(&ab.ac_btime));
+ (void)printf(" %s", buf);
+ } else
+ (void)printf(" %.16s", ctime(&ab.ac_btime));
}
/* exit time (starting time + elapsed time )*/
if (flags & AC_FTIME) {
t = ab.ac_btime;
t += (time_t)(ab.ac_etime / 1000000);
- (void)printf(" %.16s", ctime(&t));
+ if (format != NULL) {
+ (void)strftime(buf, sizeof(buf), format,
+ localtime(&t));
+ (void)printf(" %s", buf);
+ } else
+ (void)printf(" %.16s", ctime(&t));
}
printf("\n");
}
@@ -250,6 +269,7 @@ static void
usage(void)
{
(void)fprintf(stderr,
-"usage: lastcomm [-EScesu] [-f file] [command ...] [user ...] [terminal ...]\n");
+ "usage: lastcomm [-EScesu] [-f file] [+format] [command ...] "
+ "[user ...] [terminal ...]\n");
exit(1);
}
OpenPOWER on IntegriCloud