42 lines
961 B
Rust
42 lines
961 B
Rust
|
#![feature(anonymous_pipe)]
|
||
|
|
||
|
fn main() {
|
||
|
#[cfg(all(not(miri), any(unix, windows)))]
|
||
|
{
|
||
|
use std::io::Read;
|
||
|
use std::pipe::pipe;
|
||
|
use std::{env, process};
|
||
|
|
||
|
if env::var("I_AM_THE_CHILD").is_ok() {
|
||
|
child();
|
||
|
} else {
|
||
|
parent();
|
||
|
}
|
||
|
|
||
|
fn parent() {
|
||
|
let me = env::current_exe().unwrap();
|
||
|
|
||
|
let (rx, tx) = pipe().unwrap();
|
||
|
assert!(
|
||
|
process::Command::new(me)
|
||
|
.env("I_AM_THE_CHILD", "1")
|
||
|
.stdout(tx)
|
||
|
.status()
|
||
|
.unwrap()
|
||
|
.success()
|
||
|
);
|
||
|
|
||
|
let mut s = String::new();
|
||
|
(&rx).read_to_string(&mut s).unwrap();
|
||
|
drop(rx);
|
||
|
assert_eq!(s, "Heloo,\n");
|
||
|
|
||
|
println!("Test pipe_subprocess.rs success");
|
||
|
}
|
||
|
|
||
|
fn child() {
|
||
|
println!("Heloo,");
|
||
|
}
|
||
|
}
|
||
|
}
|