Add option 'dmesg -c' which clears the kernel buffer after it is printed.
authorEitan Adler <lists@eitanadler.com>
Fri, 10 May 2013 18:24:39 +0000 (14:24 -0400)
committerSascha Wildner <saw@online.de>
Fri, 10 May 2013 18:39:15 +0000 (20:39 +0200)
Tested by: swildner

sbin/dmesg/dmesg.8
sbin/dmesg/dmesg.c

index c17bf19..b90d011 100644 (file)
@@ -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
index e781570..e15529e 100644 (file)
@@ -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 <sys/types.h>
@@ -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);
 }