#pipe #tokio #async #named-pipe

tokio-anon-pipe

Windows 的异步匿名管道

2 个版本

0.1.1 2021 年 6 月 27 日
0.1.0 2021 年 6 月 25 日

#1190 in 异步


2 crates 中使用

MIT/Apache

17KB
380 代码行

tokio-anon-pipe

Windows 的异步匿名管道。

灵感来自 https://github.com/rust-lang/rust/blob/456a03227e3c81a51631f87ec80cac301e5fa6d7/library/std/src/sys/windows/pipe.rs#L48

请注意,我们在这里特别不使用 CreatePipe,因为不幸的是,返回的匿名管道不支持重叠操作。相反,我们创建一个“希望是唯一的”名称,创建一个启用了重叠操作的命名管道。

支持的平台

x86_64-pc-windows-msvc 仅支持

示例

use tokio::io::{AsyncReadExt, AsyncWriteExt};

#[tokio::main(flavor = "current_thread")]
async fn main() -> anyhow::Result<()> {
    let (mut r, mut w) = tokio_anon_pipe::anon_pipe().await?;

    w.write_all(b"HELLO, WORLD!").await?;

    let mut buf = [0; 16];
    let len = r.read(&mut buf[..]).await?;

    assert_eq!(&buf[..len], &b"HELLO, WORLD!"[..]);
    Ok(())
}

许可证:MIT/Apache-2.0


lib.rs:

Windows 的异步匿名管道。

灵感来自 https://github.com/rust-lang/rust/blob/456a03227e3c81a51631f87ec80cac301e5fa6d7/library/std/src/sys/windows/pipe.rs#L48

请注意,我们在这里特别不使用 CreatePipe,因为不幸的是,返回的匿名管道不支持重叠操作。相反,我们创建一个“希望是唯一的”名称,创建一个启用了重叠操作的命名管道。

支持的平台

x86_64-pc-windows-msvc 仅支持

示例

use tokio::io::{AsyncReadExt, AsyncWriteExt};

#[tokio::main(flavor = "current_thread")]
async fn main() -> anyhow::Result<()> {
    let (mut r, mut w) = tokio_anon_pipe::anon_pipe().await?;

    w.write_all(b"HELLO, WORLD!").await?;

    let mut buf = [0; 16];
    let len = r.read(&mut buf[..]).await?;

    assert_eq!(&buf[..len], &b"HELLO, WORLD!"[..]);
    Ok(())
}

非 Windows 的存根。开发原因。

依赖项

~3–14MB
~112K SLoC