gopkg.in/hugelgupf/u-root.v9@v9.0.0-20180831063832-3f6f1057f09b/cmds/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 // Read 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 "syscall" 20 "unsafe" 21 ) 22 23 const ( 24 _SYSLOG_ACTION_READ = 2 25 _SYSLOG_ACTION_READ_ALL = 3 26 _SYSLOG_ACTION_READ_CLEAR = 4 27 _SYSLOG_ACTION_CLEAR = 5 28 ) 29 30 var ( 31 clear bool 32 readClear bool 33 ) 34 35 func init() { 36 flag.BoolVar(&clear, "clear", false, "Clear the log") 37 flag.BoolVar(&readClear, "read-clear", false, "Clear the log after printing") 38 flag.BoolVar(&readClear, "c", false, "Clear the log after printing") 39 } 40 41 func main() { 42 flag.Parse() 43 if clear && readClear { 44 log.Fatalf("cannot specify both -clear and -read-clear") 45 } 46 47 level := uintptr(_SYSLOG_ACTION_READ_ALL) 48 if clear { 49 level = _SYSLOG_ACTION_CLEAR 50 } 51 if readClear { 52 level = _SYSLOG_ACTION_READ_CLEAR 53 } 54 55 b := make([]byte, 256*1024) 56 amt, _, err := syscall.Syscall(syscall.SYS_SYSLOG, level, uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))) 57 if err != 0 { 58 log.Fatalf("syslog failed: %v", err) 59 } 60 61 os.Stdout.Write(b[:amt]) 62 }