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 3479/week @ 2024-03-14 4748/week @ 2024-03-21 3029/week @ 2024-03-28 2406/week @ 2024-04-04 2795/week @ 2024-04-11 2493/week @ 2024-04-18 1973/week @ 2024-04-25 1399/week @ 2024-05-02 1872/week @ 2024-05-09 2526/week @ 2024-05-16 1866/week @ 2024-05-23 2348/week @ 2024-05-30 2785/week @ 2024-06-06 2532/week @ 2024-06-13 3083/week @ 2024-06-20 3516/week @ 2024-06-27

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