< 返回版块

kcrazy 发表于 2021-05-06 14:32

如何用 tokio或mio 异步等待并读取 linux 下的 rawfd?

评论区

写评论
Bai-Jinlin 2021-05-06 20:46
use std::os::unix::io::{AsRawFd, FromRawFd, RawFd};
use tokio::fs::File;
use tokio::io::{AsyncBufReadExt, BufReader};

#[tokio::main]
async fn main() {
    let file = File::open("Cargo.toml").await.unwrap();
    let fd = file.as_raw_fd();
    wait_and_read(fd).await;
}

async fn wait_and_read(fd: RawFd) {
    let f: File = unsafe { File::from_raw_fd(fd) };
    let f = BufReader::new(f);
    let mut lines = f.lines();
    while let Some(s) = lines.next_line().await.unwrap() {
        println!("{}", s);
    }
}

这里的RawFd是c_int的别名,假如你是u32的fd直接as一下就行了。

--
👇
kcrazy: 谢谢,请问有具体的例子吗?

比如说有这么个函数,应该怎么写呢?

async fn wait_and_read(fd: u32) {
    ....
}

--
👇
Bai-Jinlin: ``` tokio::fs::File::from_raw_fd


作者 kcrazy 2021-05-06 17:24

谢谢,请问有具体的例子吗?

比如说有这么个函数,应该怎么写呢?

async fn wait_and_read(fd: u32) {
    ....
}

--
👇
Bai-Jinlin: ``` tokio::fs::File::from_raw_fd

Bai-Jinlin 2021-05-06 15:14
tokio::fs::File::from_raw_fd
1 共 3 条评论, 1 页