Allow init to change stdio

This commit is contained in:
Jeremy Soller 2016-10-17 11:00:55 -06:00
parent 2868b3098a
commit c81388d929
2 changed files with 16 additions and 0 deletions

View file

@ -1,3 +1,6 @@
[package] [package]
name = "init" name = "init"
version = "0.1.0" version = "0.1.0"
[dependencies]
syscall = { path = "../../syscall" }

View file

@ -1,3 +1,5 @@
extern crate syscall;
use std::env; use std::env;
use std::fs::File; use std::fs::File;
use std::io::{BufRead, BufReader, Result}; use std::io::{BufRead, BufReader, Result};
@ -50,6 +52,17 @@ pub fn run(file: &str) -> Result<()> {
} else { } else {
println!("init: failed to run: no argument"); println!("init: failed to run: no argument");
}, },
"stdio" => if let Some(stdio) = args.next() {
let _ = syscall::close(2);
let _ = syscall::close(1);
let _ = syscall::close(0);
let _ = syscall::open(&stdio, syscall::flag::O_RDWR);
let _ = syscall::open(&stdio, syscall::flag::O_RDWR);
let _ = syscall::open(&stdio, syscall::flag::O_RDWR);
} else {
println!("init: failed to set stdio: no argument");
},
_ => { _ => {
let mut command = Command::new(cmd); let mut command = Command::new(cmd);
for arg in args { for arg in args {