Initial implementation of anonymous_pipe
Co-authored-by: Alphyr <47725341+a1phyr@users.noreply.github.com> Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com> Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
parent
52f3c71c8d
commit
c9c8a14884
17 changed files with 551 additions and 16 deletions
103
library/std/src/sys/anonymous_pipe/unix.rs
Normal file
103
library/std/src/sys/anonymous_pipe/unix.rs
Normal file
|
@ -0,0 +1,103 @@
|
|||
use crate::{
|
||||
io,
|
||||
os::fd::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd},
|
||||
pipe::{PipeReader, PipeWriter},
|
||||
process::Stdio,
|
||||
sys::{fd::FileDesc, pipe::anon_pipe},
|
||||
sys_common::{FromInner, IntoInner},
|
||||
};
|
||||
|
||||
pub(crate) type AnonPipe = FileDesc;
|
||||
|
||||
#[inline]
|
||||
pub(crate) fn pipe() -> io::Result<(AnonPipe, AnonPipe)> {
|
||||
anon_pipe().map(|(rx, wx)| (rx.into_inner(), wx.into_inner()))
|
||||
}
|
||||
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl AsFd for PipeReader {
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.0.as_fd()
|
||||
}
|
||||
}
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl AsRawFd for PipeReader {
|
||||
fn as_raw_fd(&self) -> RawFd {
|
||||
self.0.as_raw_fd()
|
||||
}
|
||||
}
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl From<PipeReader> for OwnedFd {
|
||||
fn from(pipe: PipeReader) -> Self {
|
||||
FileDesc::into_inner(pipe.0)
|
||||
}
|
||||
}
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl FromRawFd for PipeReader {
|
||||
unsafe fn from_raw_fd(raw_fd: RawFd) -> Self {
|
||||
Self(FileDesc::from_raw_fd(raw_fd))
|
||||
}
|
||||
}
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl IntoRawFd for PipeReader {
|
||||
fn into_raw_fd(self) -> RawFd {
|
||||
self.0.into_raw_fd()
|
||||
}
|
||||
}
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl From<PipeReader> for Stdio {
|
||||
fn from(pipe: PipeReader) -> Self {
|
||||
Self::from(OwnedFd::from(pipe))
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl AsFd for PipeWriter {
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.0.as_fd()
|
||||
}
|
||||
}
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl AsRawFd for PipeWriter {
|
||||
fn as_raw_fd(&self) -> RawFd {
|
||||
self.0.as_raw_fd()
|
||||
}
|
||||
}
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl From<PipeWriter> for OwnedFd {
|
||||
fn from(pipe: PipeWriter) -> Self {
|
||||
FileDesc::into_inner(pipe.0)
|
||||
}
|
||||
}
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl FromRawFd for PipeWriter {
|
||||
unsafe fn from_raw_fd(raw_fd: RawFd) -> Self {
|
||||
Self(FileDesc::from_raw_fd(raw_fd))
|
||||
}
|
||||
}
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl IntoRawFd for PipeWriter {
|
||||
fn into_raw_fd(self) -> RawFd {
|
||||
self.0.into_raw_fd()
|
||||
}
|
||||
}
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl From<PipeWriter> for Stdio {
|
||||
fn from(pipe: PipeWriter) -> Self {
|
||||
Self::from(OwnedFd::from(pipe))
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl From<OwnedFd> for PipeReader {
|
||||
fn from(owned_fd: OwnedFd) -> Self {
|
||||
Self(FileDesc::from_inner(owned_fd))
|
||||
}
|
||||
}
|
||||
|
||||
#[unstable(feature = "anonymous_pipe", issue = "127154")]
|
||||
impl From<OwnedFd> for PipeWriter {
|
||||
fn from(owned_fd: OwnedFd) -> Self {
|
||||
Self(FileDesc::from_inner(owned_fd))
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue