#![allow(dead_code, unused_imports)]
extern crate encoding;
use std::error::Error;
use std::io::{BufReader, BufRead};
use std::process::{self, Command, Stdio};
use encoding::{Encoding, DecoderTrap, EncoderTrap};
use encoding::all::{GBK, UTF_8};
#[allow(dead_code)]
pub fn run_cmd() {
let cmd_str: String;
if cfg!(target_os = "windows") {
cmd_str = "dir d:\\program".to_string();
} else {
cmd_str = "ls -alh".to_string();
}
let output = if cfg!(target_os = "windows") {
Command::new("cmd")
.arg("/c")
.arg(cmd_str)
.arg("/n")
.output()
.expect("cmd exec error!")
} else {
Command::new("sh")
.arg("-c")
.args(["ls","-alh"])
.arg("/home/user ")
.output()
.expect("sh exec error!")
};
let out = if cfg!(target_os = "windows") {
GBK.decode(&output.stdout, DecoderTrap::Strict).unwrap()
} else {
String::from_utf8(output.stdout).unwrap()
};
println!("run_cmd ret: {}", out);
}
#[allow(dead_code)]
pub fn ls() -> Result<(), Box<dyn Error>> {
let output = Command::new("ls").output()?; let out = String::from_utf8(output.stdout).unwrap();
println!("{}", out);
Ok(())
}
#[allow(dead_code)]
pub fn ps() {
let output = Command::new("ps")
.arg("-q")
.arg(process::id().to_string())
.arg("-o")
.arg("%cpu,%mem")
.output()
.unwrap();
let out = String::from_utf8(output.stdout).unwrap();
println!("{}", out);
}
#[allow(dead_code)]
pub unsafe fn xargs() {
let mut cmd = "cat /proc/".to_string();
cmd += &process::id().to_string();
cmd += &"/stat | awk '{print $14,$15,$16,$17}'".to_string();
let output = Command::new("bash")
.arg("-c")
.arg(cmd)
.output()
.unwrap();
let out = String::from_utf8_unchecked(output.stdout);
println!("utime stime cutime cstime");
println!("{}", out);
}
#[allow(dead_code)]
pub fn time() {
let mut fname = "/proc/".to_string();
fname += &process::id().to_string();
fname += &"/stat".to_string();
let child = Command::new("cat")
.arg(fname)
.stdout(Stdio::piped())
.spawn()
.unwrap();
let output = Command::new("awk")
.arg("{print $14,$15,$16,$17}")
.stdin(child.stdout.unwrap())
.output()
.unwrap();
let out = String::from_utf8(output.stdout).unwrap();
println!("utime stime cutime cstime");
println!("{}", out);
}
#[allow(dead_code)]
pub fn iostat() {
let child = Command::new("iostat")
.arg("1")
.stdout(Stdio::piped())
.spawn()
.unwrap();
let mut out = BufReader::new(child.stdout.unwrap());
let mut line = String::new();
while let Ok(_) = out.read_line(&mut line) {
println!("{}", line);
}
}