1use std::io;
2#[derive(Debug, Clone)]
3pub struct Info {
4 pub sysname: String,
5 pub nodename: String,
6 pub release: String,
7 pub version: String,
8 pub machine: String,
9}
10
11pub fn uname() -> io::Result<Info> {
12 Info::new()
13}
14
15fn exec(cmd: &str, arg: &str) -> String {
16 let out = std::process::Command::new(cmd)
17 .arg(arg)
18 .output()
19 .unwrap()
20 .stdout;
21 String::from_utf8(out).unwrap().trim().to_string()
22}
23
24impl Info {
25 pub fn new() -> io::Result<Self> {
26 let sysname = exec("uname", "-s");
27 let nodename = exec("uname", "-n");
28 let release = exec("uname", "-r");
29 let version = exec("uname", "-v");
30 let machine = exec("uname", "-m");
31
32 Ok(Info {
33 sysname,
34 nodename,
35 release,
36 version,
37 machine,
38 })
39 }
40}