7 个版本

0.1.6 2023年2月24日
0.1.5 2022年12月3日
0.1.4 2020年5月14日
0.1.3 2020年4月13日
0.1.1 2019年3月13日

#417 in Unix APIs

Download history • Rust 包仓库 3479/week @ 2024-03-14 • Rust 包仓库 4748/week @ 2024-03-21 • Rust 包仓库 3029/week @ 2024-03-28 • Rust 包仓库 2406/week @ 2024-04-04 • Rust 包仓库 2795/week @ 2024-04-11 • Rust 包仓库 2493/week @ 2024-04-18 • Rust 包仓库 1973/week @ 2024-04-25 • Rust 包仓库 1399/week @ 2024-05-02 • Rust 包仓库 1872/week @ 2024-05-09 • Rust 包仓库 2526/week @ 2024-05-16 • Rust 包仓库 1866/week @ 2024-05-23 • Rust 包仓库 2348/week @ 2024-05-30 • Rust 包仓库 2785/week @ 2024-06-06 • Rust 包仓库 2532/week @ 2024-06-13 • Rust 包仓库 3083/week @ 2024-06-20 • Rust 包仓库 3516/week @ 2024-06-27 • Rust 包仓库

12,433 monthly downloads
15 crates (3 directly) 中使用

MIT 许可

39KB
355 lines

passfd

Build Status

Unix 套接字具有神奇的能力,可以使用神秘的 SCM_RIGHTS API 将文件描述符从一个进程传递到另一个(无关的)进程。这个小库为 UnixStream 添加了扩展方法来使用它。


lib.rs:

passfd 允许使用 Unix 套接字在无关进程之间传递文件描述符。

支持 tokio 0.1 和 0.2,通过 tokio_01tokio_02 功能。请注意,这些功能依赖于 UnixStream 的内部表示,并且是不安全的。

示例用法

进程 1(发送方)

use passfd::FdPassingExt;
use std::fs::File;
use std::os::unix::io::AsRawFd;
use std::os::unix::net::UnixListener;

let file = File::open("/etc/passwd").unwrap();
let listener = UnixListener::bind("/tmp/test.sock").unwrap();
let (stream, _) = listener.accept().unwrap();
stream.send_fd(file.as_raw_fd()).unwrap();

进程 2(接收方)

use passfd::FdPassingExt;
use std::fs::File;
use std::io::Read;
use std::os::unix::io::FromRawFd;
use std::os::unix::net::UnixStream;

let stream = UnixStream::connect("/tmp/test.sock").unwrap();
let fd = stream.recv_fd().unwrap();
let mut file = unsafe { File::from_raw_fd(fd) };
let mut buf = String::new();
file.read_to_string(&mut buf).unwrap();
println!("{}", buf);

依赖项

~0–12MB
~87K SLoC