Pipe OK.
This commit is contained in:
parent
2e6734027d
commit
8e178c0080
14 changed files with 218 additions and 18 deletions
|
@ -11,10 +11,11 @@ pub trait File : Any + Send + Sync {
|
|||
}
|
||||
|
||||
impl dyn File {
|
||||
#[allow(unused)]
|
||||
pub fn downcast_ref<T: File>(&self) -> Option<&T> {
|
||||
self.as_any_ref().downcast_ref::<T>()
|
||||
}
|
||||
}
|
||||
|
||||
pub use pipe::{Pipe};
|
||||
pub use pipe::{Pipe, make_pipe};
|
||||
pub use stdio::{Stdin, Stdout};
|
|
@ -44,7 +44,7 @@ pub struct PipeRingBuffer {
|
|||
head: usize,
|
||||
tail: usize,
|
||||
status: RingBufferStatus,
|
||||
write_end: Option<Weak<Mutex<Pipe>>>,
|
||||
write_end: Option<Weak<Pipe>>,
|
||||
}
|
||||
|
||||
impl PipeRingBuffer {
|
||||
|
@ -57,7 +57,7 @@ impl PipeRingBuffer {
|
|||
write_end: None,
|
||||
}
|
||||
}
|
||||
pub fn set_write_end(&mut self, write_end: &Arc<Mutex<Pipe>>) {
|
||||
pub fn set_write_end(&mut self, write_end: &Arc<Pipe>) {
|
||||
self.write_end = Some(Arc::downgrade(write_end));
|
||||
}
|
||||
pub fn write_byte(&mut self, byte: u8) {
|
||||
|
@ -101,14 +101,14 @@ impl PipeRingBuffer {
|
|||
}
|
||||
|
||||
/// Return (read_end, write_end)
|
||||
pub fn make_pipe() -> (Arc<Mutex<Pipe>>, Arc<Mutex<Pipe>>) {
|
||||
pub fn make_pipe() -> (Arc<Pipe>, Arc<Pipe>) {
|
||||
let buffer = Arc::new(Mutex::new(PipeRingBuffer::new()));
|
||||
let read_end = Arc::new(Mutex::new(
|
||||
let read_end = Arc::new(
|
||||
Pipe::read_end_with_buffer(buffer.clone())
|
||||
));
|
||||
let write_end = Arc::new(Mutex::new(
|
||||
);
|
||||
let write_end = Arc::new(
|
||||
Pipe::write_end_with_buffer(buffer.clone())
|
||||
));
|
||||
);
|
||||
buffer.lock().set_write_end(&write_end);
|
||||
(read_end, write_end)
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use super::File;
|
||||
use crate::mm::{UserBuffer, UserBufferIterator};
|
||||
use crate::mm::{UserBuffer};
|
||||
use crate::sbi::console_getchar;
|
||||
use crate::task::suspend_current_and_run_next;
|
||||
use core::any::Any;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue