github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/cmds/core/dmesg/dmesg.go (about)

     1  // Copyright 2012-2017 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // dmesg reads the system log.
     6  //
     7  // Synopsis:
     8  //     dmesg [-clear|-read-clear]
     9  //
    10  // Options:
    11  //     -clear: clear the log
    12  //     -read-clear: clear the log after printing
    13  package main
    14  
    15  import (
    16  	"flag"
    17  	"log"
    18  	"os"
    19  
    20  	"golang.org/x/sys/unix"
    21  )
    22  
    23  var (
    24  	clear     bool
    25  	readClear bool
    26  )
    27  
    28  func init() {
    29  	flag.BoolVar(&clear, "clear", false, "Clear the log")
    30  	flag.BoolVar(&readClear, "read-clear", false, "Clear the log after printing")
    31  	flag.BoolVar(&readClear, "c", false, "Clear the log after printing")
    32  }
    33  
    34  func main() {
    35  	flag.Parse()
    36  	if clear && readClear {
    37  		log.Fatalf("cannot specify both -clear and -read-clear")
    38  	}
    39  
    40  	level := unix.SYSLOG_ACTION_READ_ALL
    41  	if clear {
    42  		level = unix.SYSLOG_ACTION_CLEAR
    43  	}
    44  	if readClear {
    45  		level = unix.SYSLOG_ACTION_READ_CLEAR
    46  	}
    47  
    48  	b := make([]byte, 256*1024)
    49  	amt, err := unix.Klogctl(level, b)
    50  	if err != nil {
    51  		log.Fatalf("syslog failed: %v", err)
    52  	}
    53  
    54  	os.Stdout.Write(b[:amt])
    55  }