svn commit: r250430 - head/sbin/dmesg

Eitan Adler eadler at FreeBSD.org
Fri May 10 03:42:49 UTC 2013


Author: eadler
Date: Fri May 10 03:42:48 2013
New Revision: 250430
URL: http://svnweb.freebsd.org/changeset/base/250430

Log:
  Add support for 'dmesg -c' which clears the dmesg buffer after it has
  been printed.  This provides compatibility with other *nix systems
  (including Linux).
  
  While here use stdbool booleans for 'all'.
  
  PR:		bin/178295
  Submitted by:	Levent Serinol <lserinol at gmail.com>
  Reviewed by:	will

Modified:
  head/sbin/dmesg/dmesg.8
  head/sbin/dmesg/dmesg.c

Modified: head/sbin/dmesg/dmesg.8
==============================================================================
--- head/sbin/dmesg/dmesg.8	Fri May 10 03:05:44 2013	(r250429)
+++ head/sbin/dmesg/dmesg.8	Fri May 10 03:42:48 2013	(r250430)
@@ -36,7 +36,7 @@
 .Nd "display the system message buffer"
 .Sh SYNOPSIS
 .Nm
-.Op Fl a
+.Op Fl ac
 .Op Fl M Ar core Op Fl N Ar system
 .Sh DESCRIPTION
 The
@@ -59,6 +59,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.
 .It Fl N

Modified: head/sbin/dmesg/dmesg.c
==============================================================================
--- head/sbin/dmesg/dmesg.c	Fri May 10 03:05:44 2013	(r250429)
+++ head/sbin/dmesg/dmesg.c	Fri May 10 03:42:48 2013	(r250430)
@@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$");
 #include <locale.h>
 #include <nlist.h>
 #include <stdio.h>
+#include <stdbool.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
@@ -79,15 +80,20 @@ main(int argc, char *argv[])
 	kvm_t *kd;
 	size_t buflen, bufpos;
 	long pri;
-	int all, ch;
+	int ch, clear;
+	bool all;
 
-	all = 0;
+	all = false;
+	clear = false;
 	(void) 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++;
+			all = true;
+			break;
+		case 'c':
+			clear = true;
 			break;
 		case 'M':
 			memf = optarg;
@@ -190,12 +196,16 @@ main(int argc, char *argv[])
 		(void)strvisx(visbp, p, nextp - p, 0);
 		(void)printf("%s", visbp);
 	}
+	if (clear)
+		if (sysctlbyname("kern.msgbuf_clear", NULL, NULL, &clear, sizeof(int)))
+			err(1, "sysctl kern.msgbuf_clear");
+
 	exit(0);
 }
 
 void
 usage(void)
 {
-	(void)fprintf(stderr, "usage: dmesg [-a] [-M core [-N system]]\n");
+	fprintf(stderr, "usage: dmesg [-ac] [-M core [-N system]]\n");
 	exit(1);
 }


More information about the svn-src-all mailing list