use std::env; use std::fs::File; use std::io; use std::io::prelude::*; const BUFSIZE: usize = 17; fn main() { let args: Vec = env::args().collect(); for arg in &args[1..] { cat(arg, BUFSIZE); } } fn cat(filename: &str, bufsize: usize) { // The following gives fugly error message if there's a problem. // Need to find a better way to report errors to normal people. let mut f = File::open(filename).unwrap(); let mut buffer = vec![0; bufsize]; loop { match f.read(&mut buffer).unwrap() { 0 => break, n => write(&buffer[..n]), }; } } fn write(buffer: &[u8]) { // Again, the error message is fugly if there's a problem. Also, // ideally this wouldn't hardcode the output stream, but it turns // out that io::stdout() doesn't return a File, so passing in an // open file is tricky. io::stdout().write(&buffer).unwrap(); }