aboutsummaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2012-05-24 09:11:38 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2012-05-24 09:11:38 +0000
commit2ced92b9214f4c3231bcb2301b84e4cec1a24874 (patch)
treea93acac4a8ad530acf51b3e149615ac486b61961 /usr.bin
parentde6ce1333261e7ffcd780b4571d245a5f7c5cc49 (diff)
downloadsrc-2ced92b9214f4c3231bcb2301b84e4cec1a24874.tar.gz
src-2ced92b9214f4c3231bcb2301b84e4cec1a24874.zip
MFC r235541:
Allow to specify strftime(3) format for process start end exit times.
Notes
Notes: svn path=/stable/8/; revision=235888
Diffstat (limited to 'usr.bin')
-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 8cb2039ab87f..27615cf37bf7 100644
--- a/usr.bin/lastcomm/lastcomm.1
+++ b/usr.bin/lastcomm/lastcomm.1
@@ -32,7 +32,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
@@ -42,6 +42,7 @@
.Nm
.Op Fl EScesu
.Op Fl f Ar file
+.Op Cm + Ns Ar format
.Op Ar command ...\&
.Op Ar user ...\&
.Op Ar terminal ...\&
@@ -81,6 +82,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.
@@ -169,6 +179,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 2401796c54da..2edd81d599e0 100644
--- a/usr.bin/lastcomm/lastcomm.c
+++ b/usr.bin/lastcomm/lastcomm.c
@@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$");
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include <unistd.h>
#include <utmp.h>
#include "pathnames.h"
@@ -87,10 +88,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':
@@ -131,6 +134,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;
@@ -182,14 +191,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");
}
@@ -255,6 +274,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);
}