sysutil_bsd.go 444 B

1234567891011121314151617181920212223242526
  1. // +build darwin freebsd openbsd netbsd
  2. package sysutil
  3. import (
  4. "bytes"
  5. "encoding/binary"
  6. "syscall"
  7. "time"
  8. )
  9. func init() {
  10. // get boot time
  11. res, err := syscall.Sysctl("kern.boottime")
  12. if err != nil {
  13. btime = time.Now()
  14. return
  15. }
  16. // decode
  17. var t timeval
  18. if err = binary.Read(bytes.NewBuffer([]byte(res)), binary.LittleEndian, &t); err != nil {
  19. btime = time.Now()
  20. return
  21. }
  22. btime = time.Unix(int64(t.Sec), int64(t.Usec))
  23. }