pub struct PipeFile {
buffer: Arc<SpinLock<PipeRingBuffer>>,
end_type: PipeEnd,
flags: SpinLock<OpenFlags>,
owner: SpinLock<Option<i32>>,
}Expand description
管道文件实现
特点:
- 单向数据流 (读端和写端分别创建两个 PipeFile 实例)
- 流式设备 (无 offset 概念,不支持 lseek)
- 不依赖 Inode (纯内存结构)
Fields§
§buffer: Arc<SpinLock<PipeRingBuffer>>共享的环形缓冲区
end_type: PipeEnd文件端点类型
flags: SpinLock<OpenFlags>打开标志位 (支持 O_NONBLOCK 等)
owner: SpinLock<Option<i32>>异步 I/O 所有者 PID
Implementations§
Source§impl PipeFile
impl PipeFile
Sourcepub fn create_pair() -> (Self, Self)
pub fn create_pair() -> (Self, Self)
创建管道对 (返回 [读端, 写端])
§示例
let (pipe_read, pipe_write) = PipeFile::create_pair();
fd_table.install_at(3, Arc::new(pipe_read) as Arc<dyn File>)?;
fd_table.install_at(4, Arc::new(pipe_write) as Arc<dyn File>)?;Sourcepub fn get_pipe_size(&self) -> usize
pub fn get_pipe_size(&self) -> usize
获取管道大小 (F_GETPIPE_SZ)
Sourcepub fn set_pipe_size(&self, new_size: usize) -> Result<(), FsError>
pub fn set_pipe_size(&self, new_size: usize) -> Result<(), FsError>
设置管道大小 (F_SETPIPE_SZ)
Trait Implementations§
Source§impl File for PipeFile
impl File for PipeFile
Source§fn metadata(&self) -> Result<InodeMetadata, FsError>
fn metadata(&self) -> Result<InodeMetadata, FsError>
获取文件元数据
Source§fn set_status_flags(&self, new_flags: OpenFlags) -> Result<(), FsError>
fn set_status_flags(&self, new_flags: OpenFlags) -> Result<(), FsError>
设置文件状态标志(可选方法,用于 F_SETFL) Read more
Source§fn get_pipe_size(&self) -> Result<usize, FsError>
fn get_pipe_size(&self) -> Result<usize, FsError>
获取管道大小(可选方法,用于 F_GETPIPE_SZ) Read more
Source§fn set_pipe_size(&self, size: usize) -> Result<(), FsError>
fn set_pipe_size(&self, size: usize) -> Result<(), FsError>
设置管道大小(可选方法,用于 F_SETPIPE_SZ) Read more
Source§fn lseek(&self, _offset: isize, _whence: SeekWhence) -> Result<usize, FsError>
fn lseek(&self, _offset: isize, _whence: SeekWhence) -> Result<usize, FsError>
设置文件偏移量(可选方法) Read more
Source§fn read_at(&self, _offset: usize, _buf: &mut [u8]) -> Result<usize, FsError>
fn read_at(&self, _offset: usize, _buf: &mut [u8]) -> Result<usize, FsError>
从指定位置读取数据(可选方法,用于 pread64/preadv) Read more
Source§fn write_at(&self, _offset: usize, _buf: &[u8]) -> Result<usize, FsError>
fn write_at(&self, _offset: usize, _buf: &[u8]) -> Result<usize, FsError>
向指定位置写入数据(可选方法,用于 pwrite64/pwritev) Read more