mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-04 18:59:37 +00:00
Allow to specify strftime(3) format for process start end exit times.
Submitted by: Andrey Zonov <andrey zonov org> MFC after: 1 week
This commit is contained in:
parent
6e55e4c37b
commit
8f04882e81
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user