kcrazy 发表于 2021-05-06 14:32
如何用 tokio或mio 异步等待并读取 linux 下的 rawfd?
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
谢谢,请问有具体的例子吗?
tokio::fs::File::from_raw_fd
评论区
写评论这里的RawFd是c_int的别名,假如你是u32的fd直接as一下就行了。
--
👇
kcrazy: 谢谢,请问有具体的例子吗?
比如说有这么个函数,应该怎么写呢?
--
👇
Bai-Jinlin: ``` tokio::fs::File::from_raw_fd
谢谢,请问有具体的例子吗?
比如说有这么个函数,应该怎么写呢?
--
👇
Bai-Jinlin: ``` tokio::fs::File::from_raw_fd