#crt #process #windows #spawn

winspawn

在 Windows 上传递通用 CRT 文件描述符的进程生成器

2 个版本

0.1.1 2021 年 7 月 1 日
0.1.0 2021 年 6 月 28 日

#7 in #crt

每月 22 次下载
用于 chrome-remote-interface

MIT/Apache

145KB
5K SLoC

winspawn

在 Windows 上生成进程以传递通用 CRT 的文件描述符。

使用 _spawn & _dup

示例

use winspawn::{move_fd, spawn, FileDescriptor, Mode};

use std::mem;
use std::io;
use std::fs;
use std::os::windows::io::IntoRawHandle;

fn main() -> io::Result<()> {
    let file = fs::File::open("Cargo.toml")?;
    let handle = file.into_raw_handle();
    let fd = FileDescriptor::from_raw_handle(handle, Mode::ReadOnly)?;

    let mut proc = move_fd(&fd, 3, |_| {
        // print fd 3 stat
        spawn("python", ["-c", r#""import os; print(os.stat(3))""#])
    })?;

    let exit_code = proc.wait()?;
    assert_eq!(0, exit_code);

    Ok(())
}

许可证:MIT/Apache-2.0


lib.rs:

在 Windows 上生成进程以传递通用 CRT 的文件描述符。

使用 _spawn & _dup

示例

use winspawn::{move_fd, spawn, FileDescriptor, Mode};

use std::mem;
use std::io;
use std::fs;
use std::os::windows::io::IntoRawHandle;

fn main() -> io::Result<()> {
    let file = fs::File::open("Cargo.toml")?;
    let fd = FileDescriptor::from_raw_handle(file, Mode::ReadOnly)?;

    let mut proc = move_fd(&fd, 3, |_| {
        // print fd 3 stat
        spawn("python", ["-c", r#""import os; print(os.stat(3))""#])
    })?;

    let exit_code = proc.wait()?;
    assert_eq!(0, exit_code);

    Ok(())
}

依赖项

~124MB
~2M SLoC