4个版本
0.2.2 | 2023年7月10日 |
---|---|
0.2.1 | 2021年8月14日 |
0.2.0 | 2021年8月14日 |
0.1.0 | 2021年8月6日 |
#353 in Unix APIs
10KB
62 代码行数,不包括注释
pidfd_getfd
此包提供了对pidfd_getfd系统调用的直接绑定,以及一个稍微方便一些的包装器get_file_from_pidfd。它还包含对PidFd和std::os::linux::process::PidFd的扩展trait(目前仅在nightly rustc上可用),通过PidFdExt::get_file()提供对get_file_from_pidfd的访问。
请注意,pidfd目前仅在Linux 5.6或更高版本上受支持,因此此包只能在Linux上运行。如果其他平台获得对pidfd的支持,请通过issue或pull request通知我!
请注意,此包尚未经过彻底测试。请谨慎使用。
示例
use pidfd_getfd::{get_file_from_pidfd, GetFdFlags};
use std::{
io::{self, Read},
os::unix::prelude::RawFd,
};
let pidfd: RawFd = /* ... */;
let target_fd: RawFd = /* ... */;
let mut file = get_file_from_pidfd(pidfd, target_fd, GetFdFlags::empty())?;
let mut buf = Vec::new();
file.read_to_end(&mut buf)?;
println!("{:#?}", buf);
Ok(())
使用pidfd
use pidfd::PidFd;
use pidfd_getfd::{GetFdFlags, PidFdExt};
use std::process::Command;
let child = Command::new("/usr/bin/foo").spawn().expect("failed to run `foo`");
let pidfd = PidFd::from_std_checked(&child)?;
let file_from_child = pidfd.get_file(1, GetFdFlags::empty())?;
使用nightly rustc
#![feature(linux_pidfd)]
use pidfd_getfd::{GetFdFlags, PidFdExt};
use std::{
os::linux::process::{ChildExt, CommandExt},
process::Command,
};
let child = Command::new("/usr/bin/foo")
.create_pidfd(true)
.spawn()
.expect("failed to run `foo`");
let file_from_child = child.pidfd()?.get_file(1, GetFdFlags::empty())?;
依赖项
~37KB