//! Helper program that `demo` (and the tests) spawn: //! child -> print my arguments, exit 0 //! child -> exit with that number (tests wait() exit codes) //! child pipe -> write a line to stdout (demo reads it via a pipe) //! child cat -> copy stdin to stdout until EOF #![no_std] #![no_main] #[macro_use] #[path = "ulib.rs"] mod ulib; use ulib::*; fn main() -> i64 { match arg(1) { Some("pipe") => { println!("hello through a pipe from pid {}", getpid()); 0 } Some("cat") => { let mut buf = [0u8; 64]; loop { let n = read(0, &mut buf); if n <= 0 { return n; } write(1, &buf[..n as usize]); } } Some(number) if number.parse::().is_ok() => number.parse().unwrap(), _ => { print!("[child] pid {} got {} args:", getpid(), argc()); for i in 0..argc() { print!(" {:?}", arg(i).unwrap_or("?")); } println!(); 0 } } }