cross_uname/
lib.rs

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}