#fork #pseudo-terminal #tty #pseudo #terminal

未维护 pty

使用新的伪终端(PTY)进行Fork

10个版本

使用旧的Rust 2015

0.2.2 2017年6月25日
0.2.1 2016年11月9日
0.2.0 2016年9月5日
0.1.6 2015年11月14日
0.1.3 2015年7月19日

#9 in #pseudo-terminal

Download history 136/week @ 2024-03-13 228/week @ 2024-03-20 332/week @ 2024-03-27 462/week @ 2024-04-03 176/week @ 2024-04-10 124/week @ 2024-04-17 151/week @ 2024-04-24 107/week @ 2024-05-01 104/week @ 2024-05-08 118/week @ 2024-05-15 102/week @ 2024-05-22 102/week @ 2024-05-29 108/week @ 2024-06-05 99/week @ 2024-06-12 158/week @ 2024-06-19 80/week @ 2024-06-26

466 每月下载量
10 个crate(9个直接)中使用

MIT 许可证

21KB
400

PTY

Crate docs-badge license-badge travis-badge

pty crate提供pty::fork()。这使得父进程通过新的伪终端(PTY)进行Fork。

此crate依赖于以下内容

  • libc
  • POSIX环境

使用方法

将其添加到您的 Cargo.toml

[dependencies]
pty = "0.2"

并将其添加到您的crate根目录

extern crate pty;

pty::fork()

此函数返回 pty::Child。它表示子进程及其PTY。

例如,以下代码通过pty::fork()启动tty(1)命令,并输出命令的结果。

extern crate pty;
extern crate libc;

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

use pty::fork::*;

fn main() {
  let fork = Fork::from_ptmx().unwrap();

  if let Some(mut master) = fork.is_parent().ok() {
    // Read output via PTY master
    let mut output = String::new();

    match master.read_to_string(&mut output) {
      Ok(_nread) => println!("child tty is: {}", output.trim()),
      Err(e)     => panic!("read error: {}", e),
    }
  }
  else {
    // Child process just exec `tty`
    Command::new("tty").status().expect("could not execute tty");
  }
}

运行时,我们在子进程中获得新的PTY。

$ tty
/dev/pts/5
$ cargo run
    Running `target/debug/example`
child tty is: /dev/pts/8

文档

最新版本的API文档: http://hibariya.github.io/pty-rs/pty/index.html

贡献

  1. 分叉它( https://github.com/hibariya/pty-rs/fork
  2. 创建您的功能分支(git checkout -b my-new-feature
  3. 提交您的更改(git commit -am 'Add some feature'
  4. 将更改推送到分支(git push origin my-new-feature
  5. 创建一个新的Pull Request

许可证

版权所有 (c) 2015 Hika Hibariya

MIT 许可证 下分发。

依赖关系

~110KB