add uname functionality, kinda
This commit is contained in:
parent
ef3760879b
commit
b8c590218b
1 changed files with 56 additions and 0 deletions
56
pkg/uname/uname.go
Normal file
56
pkg/uname/uname.go
Normal file
|
@ -0,0 +1,56 @@
|
|||
package uname
|
||||
|
||||
import "syscall"
|
||||
|
||||
type Uname struct {
|
||||
Sysname string
|
||||
Nodename string
|
||||
Hostname string
|
||||
Release string
|
||||
Kernel string
|
||||
Version string
|
||||
Machine string
|
||||
Arch string
|
||||
Domainname string
|
||||
}
|
||||
|
||||
// A utility to convert int8 values to proper strings.
|
||||
func int8ToStr(arr []int8) string {
|
||||
b := make([]byte, 0, len(arr))
|
||||
for _, v := range arr {
|
||||
if v == 0x00 {
|
||||
break
|
||||
}
|
||||
b = append(b, byte(v))
|
||||
}
|
||||
return string(b)
|
||||
}
|
||||
|
||||
func New() *Uname {
|
||||
var system syscall.Utsname
|
||||
uname := &Uname{}
|
||||
if err := syscall.Uname(&system); err == nil {
|
||||
// extract members:
|
||||
// type Utsname struct {
|
||||
// Sysname [65]int8
|
||||
// Nodename [65]int8
|
||||
// Release [65]int8
|
||||
// Version [65]int8
|
||||
// Machine [65]int8
|
||||
// Domainname [65]int8
|
||||
// }
|
||||
|
||||
// Add to the uname struct for humans
|
||||
uname.Sysname = int8ToStr(system.Sysname[:])
|
||||
uname.Nodename = int8ToStr(system.Nodename[:])
|
||||
uname.Hostname = uname.Nodename
|
||||
uname.Release = int8ToStr(system.Release[:])
|
||||
uname.Kernel = uname.Release
|
||||
uname.Version = int8ToStr(system.Version[:])
|
||||
uname.Machine = int8ToStr(system.Machine[:])
|
||||
uname.Arch = uname.Machine
|
||||
uname.Domainname = int8ToStr(system.Domainname[:])
|
||||
}
|
||||
|
||||
return uname
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue