use pwner::Spawner;
fn main() {
let mut child = std::process::Command::new("cat")
.spawn_owned()
.expect("Couldn't start the child process");
let (stdin, stdout, stderr) = child.pipes();
crossbeam::scope(|s| {
s.spawn(|_| {
use std::io::Read;
let mut buffer = [0_u8; 1024];
while let Ok(bytes) = stdout.read(&mut buffer) {
if bytes == 0 {
println!("out ::");
} else if let Ok(string) = std::str::from_utf8(&buffer[..bytes - 1]) {
println!("out :: {}", string);
}
}
});
s.spawn(|_| {
use std::io::Read;
let mut buffer = [0_u8; 1024];
while let Ok(bytes) = stderr.read(&mut buffer) {
if bytes == 0 {
eprintln!("err ::");
} else if let Ok(string) = std::str::from_utf8(&buffer[..bytes - 1]) {
eprintln!("err :: {}", string);
}
}
});
{
use std::io::{Read, Write};
let mut buffer = [0_u8; 1024];
while let Ok(bytes @ 1..=1024) = std::io::stdin().read(&mut buffer) {
stdin
.write_all(&buffer[..bytes])
.expect("Could not write to child");
}
}
std::process::exit(0);
})
.expect("Failed to start threads");
}