Function pty::fork [] [src]

pub fn fork() -> Result<Child>

Fork with new pseudo-terminal (PTY).

Examples

extern crate libc;
extern crate pty;

use std::ffi::CString;
use std::io::Read;
use std::ptr;

fn main()
{
    let child = pty::fork().unwrap();

    if child.pid() == 0 {
        // Child process just exec `tty`
        let cmd  = CString::new("tty").unwrap().as_ptr();
        let args = [cmd, ptr::null()].as_mut_ptr();

        unsafe { libc::execvp(cmd, args) };
    }
    else {
        // Read output via PTY master
        let mut output     = String::new();
        let mut pty_master = child.pty().unwrap();

        match pty_master.read_to_string(&mut output) {
            Ok(_nread) => println!("child tty is: {}", output.trim()),
            Err(e)     => panic!("read error: {}", e)
        }

        let _ = child.wait();
    }
}