mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-29 13:13:21 +00:00
57 lines
1.3 KiB
Rust
57 lines
1.3 KiB
Rust
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
use super::{
|
|
file_handle::FileLike,
|
|
pipe::{self, PipeReader, PipeWriter},
|
|
utils::{AccessMode, Metadata},
|
|
};
|
|
use crate::{
|
|
events::IoEvents,
|
|
prelude::*,
|
|
process::signal::{PollHandle, Pollable},
|
|
};
|
|
|
|
pub struct NamedPipe {
|
|
reader: Arc<PipeReader>,
|
|
writer: Arc<PipeWriter>,
|
|
}
|
|
|
|
impl NamedPipe {
|
|
pub fn new() -> Result<Self> {
|
|
let (reader, writer) = pipe::new_pair()?;
|
|
|
|
Ok(Self { reader, writer })
|
|
}
|
|
|
|
pub fn with_capacity(capacity: usize) -> Result<Self> {
|
|
let (reader, writer) = pipe::new_pair_with_capacity(capacity)?;
|
|
|
|
Ok(Self { reader, writer })
|
|
}
|
|
}
|
|
|
|
impl Pollable for NamedPipe {
|
|
fn poll(&self, _mask: IoEvents, _poller: Option<&mut PollHandle>) -> IoEvents {
|
|
warn!("Named pipe doesn't support poll now, return IoEvents::empty for now.");
|
|
IoEvents::empty()
|
|
}
|
|
}
|
|
|
|
impl FileLike for NamedPipe {
|
|
fn read(&self, writer: &mut VmWriter) -> Result<usize> {
|
|
self.reader.read(writer)
|
|
}
|
|
|
|
fn write(&self, reader: &mut VmReader) -> Result<usize> {
|
|
self.writer.write(reader)
|
|
}
|
|
|
|
fn access_mode(&self) -> AccessMode {
|
|
AccessMode::O_RDWR
|
|
}
|
|
|
|
fn metadata(&self) -> Metadata {
|
|
self.reader.metadata()
|
|
}
|
|
}
|