dmesg: add --clear (SYSLOG_ACTION_CLEAR)

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2011-07-01 14:33:27 +02:00
parent 48c5c66212
commit 0419986053
2 changed files with 11 additions and 1 deletions

View File

@ -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"

View File

@ -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;