From: Eitan Adler Date: Fri, 10 May 2013 18:24:39 +0000 (-0400) Subject: Add option 'dmesg -c' which clears the kernel buffer after it is printed. X-Git-Tag: v3.7.0~1126 X-Git-Url: https://gitweb.dragonflybsd.org/~tuxillo/dragonfly.git/commitdiff_plain/f5c1f6e0209e27d15d137c23e552ef830b9c6c7f Add option 'dmesg -c' which clears the kernel buffer after it is printed. Tested by: swildner --- diff --git a/sbin/dmesg/dmesg.8 b/sbin/dmesg/dmesg.8 index c17bf19da7..b90d011e44 100644 --- a/sbin/dmesg/dmesg.8 +++ b/sbin/dmesg/dmesg.8 @@ -31,9 +31,8 @@ .\" .\" @(#)dmesg.8 8.1 (Berkeley) 6/5/93 .\" $FreeBSD: src/sbin/dmesg/dmesg.8,v 1.5.2.5 2002/08/21 18:58:17 trhodes Exp $ -.\" $DragonFly: src/sbin/dmesg/dmesg.8,v 1.2 2003/06/17 04:27:32 dillon Exp $ .\" -.Dd June 5, 1993 +.Dd May 10, 2013 .Dt DMESG 8 .Os .Sh NAME @@ -42,6 +41,7 @@ .Sh SYNOPSIS .Nm .Op Fl a +.Op Fl c .Op Fl M Ar core .Op Fl N Ar system .Sh DESCRIPTION @@ -67,6 +67,8 @@ Show all data in the message buffer. This includes any syslog records and .Pa /dev/console output. +.It Fl c +Clear the kernel buffer after printing. .It Fl M Extract values associated with the name list from the specified core instead of the default diff --git a/sbin/dmesg/dmesg.c b/sbin/dmesg/dmesg.c index e781570ee9..e15529e974 100644 --- a/sbin/dmesg/dmesg.c +++ b/sbin/dmesg/dmesg.c @@ -29,7 +29,6 @@ * @(#) Copyright (c) 1991, 1993 The Regents of the University of California. All rights reserved. * @(#)dmesg.c 8.1 (Berkeley) 6/5/93 * $FreeBSD: src/sbin/dmesg/dmesg.c,v 1.11.2.3 2001/08/08 22:32:15 obrien Exp $ - * $DragonFly: src/sbin/dmesg/dmesg.c,v 1.7 2005/01/14 06:38:41 cpressey Exp $ */ #include @@ -67,16 +66,20 @@ main(int argc, char **argv) kvm_t *kd; char buf[5]; int all = 0; + int clear = 0; int pri = 0; size_t buflen, bufpos; setlocale(LC_CTYPE, ""); memf = nlistf = NULL; - while ((ch = getopt(argc, argv, "aM:N:")) != -1) + while ((ch = getopt(argc, argv, "acM:N:")) != -1) switch(ch) { case 'a': all++; break; + case 'c': + clear = 1; + break; case 'M': memf = optarg; break; @@ -173,12 +176,15 @@ main(int argc, char **argv) } while (++p != ep); if (!newl) putchar('\n'); + if (clear) + if (sysctlbyname("kern.msgbuf_clear", NULL, NULL, &clear, sizeof(int)) != 0) + err(1, "sysctl kern.msgbuf_clear"); exit(0); } void usage(void) { - fprintf(stderr, "usage: dmesg [-a] [-M core] [-N system]\n"); + fprintf(stderr, "usage: dmesg [-ac] [-M core] [-N system]\n"); exit(1); }