5 个版本
0.1.1 | 2022 年 8 月 29 日 |
---|---|
0.1.0 | 2022 年 8 月 22 日 |
0.0.3 | 2022 年 8 月 19 日 |
0.0.2 | 2022 年 8 月 16 日 |
0.0.1 | 2022 年 8 月 15 日 |
#944 在 异步
25KB
535 代码行
io-tubes
提供类似于 Python 库 pwntools 的 tube 功能。
更多示例和文档可以在 docs.rs 找到
示例
use io_tubes::tubes::Tube;
use std::io;
#[tokio::main]
async fn main() -> io::Result<()> {
let mut p = Tube::process("/usr/bin/cat")?;
// "Hello World!" will be automatically converted to `&[u8]`
// Alternatively, you can explicitly use b"Hello World!" if it contains invalid UTF-8.
p.send("Hello World!").await?;
// You can use any type that implements `AsRef<[u8]>`
let output = p.recv_until(b"World".to_vec()).await?;
assert_eq!(output, b"Hello World");
Ok(())
}
lib.rs
:
管道
提供类似于 Python 库 pwntools 的 tube 功能。
方法在结构体 Tube
中提供
示例
use io_tubes::tubes::Tube;
use std::io;
#[tokio::main]
async fn demo() -> io::Result<()> {
let mut p = Tube::process("/usr/bin/cat")?;
// "Hello World!" will be automatically converted to `&[u8]`
// Alternatively, you can explicitly use b"Hello World!" if it contains invalid UTF-8.
p.send("Hello World!").await?;
// You can use any type that implements `AsRef<[u8]>`
let output = p.recv_until(b"World".to_vec()).await?;
assert_eq!(output, b"Hello World");
Ok(())
}
demo();
任何实现 AsyncRead
+ AsyncWrite
的类型都可以使用 Tube::new
创建一个新的管道。
use io_tubes::tubes::{Listener, Tube};
use std::io;
use tokio::net::TcpStream;
#[tokio::main]
async fn create_remote() -> io::Result<()> {
let l = Listener::bind("0.0.0.0:1337").await?;
// The followings are equivalent `Tube<BufReader<TcpStream>>`.
let mut p = Tube::remote("127.0.0.1:1337").await?;
let mut p = Tube::new(TcpStream::connect("127.0.0.1:1337").await?);
Ok(())
}
create_remote();
依赖关系
~2.4–8.5MB
~59K SLoC