summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys-utils/dmesg.12
-rw-r--r--sys-utils/dmesg.c10
2 files changed, 11 insertions, 1 deletions
diff --git a/sys-utils/dmesg.1 b/sys-utils/dmesg.1
index c56bc9e57..64234d0c0 100644
--- a/sys-utils/dmesg.1
+++ b/sys-utils/dmesg.1
@@ -19,6 +19,8 @@ and mail the
.I boot.messages
file to whoever can debug their problem.
.SH OPTIONS
+.IP "\fB\-C, \-\-clear\fP"
+Clear the ring buffer.
.IP "\fB\-c, \-\-read-clear\fP"
Clear the ring buffer contents after printing.
.IP "\fB\-h, \-\-help\fP"
diff --git a/sys-utils/dmesg.c b/sys-utils/dmesg.c
index ac8da0c53..a53f49140 100644
--- a/sys-utils/dmesg.c
+++ b/sys-utils/dmesg.c
@@ -57,6 +57,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out)
fprintf(out, _(
"\nOptions:\n"
+ " -C, --clear clear the kernel ring buffer\n"
" -c, --read-clear read and clear all messages\n"
" -r, --raw print the raw message buffer\n"
" -s, --buffer-size=SIZE buffer size to query the kernel ring buffer\n"
@@ -136,6 +137,7 @@ int main(int argc, char *argv[])
int flags = 0;
static const struct option longopts[] = {
+ { "clear", no_argument, NULL, 'C' },
{ "read-clear", no_argument, NULL, 'c' },
{ "raw", no_argument, NULL, 'r' },
{ "buffer-size", required_argument, NULL, 's' },
@@ -149,8 +151,11 @@ int main(int argc, char *argv[])
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
- while ((c = getopt_long(argc, argv, "chrn:s:V", longopts, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "Cchrn:s:V", longopts, NULL)) != -1) {
switch (c) {
+ case 'C':
+ cmd = SYSLOG_ACTION_CLEAR;
+ break;
case 'c':
cmd = SYSLOG_ACTION_READ_CLEAR;
break;
@@ -195,6 +200,9 @@ int main(int argc, char *argv[])
print_buffer(buf, n, flags);
free(buf);
break;
+ case SYSLOG_ACTION_CLEAR:
+ n = klogctl(cmd, NULL, 0);
+ break;
case SYSLOG_ACTION_CONSOLE_LEVEL:
n = klogctl(cmd, NULL, console_level);
break;