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

pty2

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

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2022年12月19日

#4 in #pseudo-terminal

Download history 37/week @ 2024-03-11 4/week @ 2024-03-18 12/week @ 2024-04-01 1/week @ 2024-05-20 1/week @ 2024-05-27

2,165 每月下载量

MIT 许可证

23KB
400 行代码(不包括注释)

PTY

Crate docs-badge license-badge travis-badge

pty 包提供 pty::fork()。这使得父进程使用新的伪终端 (PTY) 进行分支。

此包依赖于以下内容

  • libc
  • POSIX 环境

用法

将此添加到您的 Cargo.toml

[dependencies]
pty = "0.2"

并将此添加到您的包根目录

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 许可证 下分发。

依赖关系

~250KB