PipeFile

Struct PipeFile 

Source
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

Source

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>)?;
Source

pub fn set_flags(&self, new_flags: OpenFlags) -> Result<(), FsError>

设置文件状态标志 (F_SETFL)

Source

pub fn get_pipe_size(&self) -> usize

获取管道大小 (F_GETPIPE_SZ)

Source

pub fn set_pipe_size(&self, new_size: usize) -> Result<(), FsError>

设置管道大小 (F_SETPIPE_SZ)

Trait Implementations§

Source§

impl Drop for PipeFile

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl File for PipeFile

Source§

fn readable(&self) -> bool

检查文件是否可读
Source§

fn writable(&self) -> bool

检查文件是否可写
Source§

fn read(&self, buf: &mut [u8]) -> Result<usize, FsError>

从文件读取数据 Read more
Source§

fn write(&self, buf: &[u8]) -> Result<usize, FsError>

向文件写入数据 Read more
Source§

fn metadata(&self) -> Result<InodeMetadata, FsError>

获取文件元数据
Source§

fn flags(&self) -> OpenFlags

获取打开标志(可选方法) Read more
Source§

fn set_status_flags(&self, new_flags: OpenFlags) -> Result<(), FsError>

设置文件状态标志(可选方法,用于 F_SETFL) Read more
Source§

fn get_pipe_size(&self) -> Result<usize, FsError>

获取管道大小(可选方法,用于 F_GETPIPE_SZ) Read more
Source§

fn set_pipe_size(&self, size: usize) -> Result<(), FsError>

设置管道大小(可选方法,用于 F_SETPIPE_SZ) Read more
Source§

fn get_owner(&self) -> Result<i32, FsError>

获取异步 I/O 所有者(可选方法,用于 F_GETOWN) Read more
Source§

fn set_owner(&self, pid: i32) -> Result<(), FsError>

设置异步 I/O 所有者(可选方法,用于 F_SETOWN) Read more
Source§

fn as_any(&self) -> &dyn Any

获取 Any trait 引用,用于安全的类型转换
Source§

fn lseek(&self, _offset: isize, _whence: SeekWhence) -> Result<usize, FsError>

设置文件偏移量(可选方法) Read more
Source§

fn offset(&self) -> usize

获取当前偏移量(可选方法) Read more
Source§

fn dentry(&self) -> Result<Arc<Dentry>, FsError>

获取目录项(可选方法) Read more
Source§

fn inode(&self) -> Result<Arc<dyn Inode>, FsError>

获取Inode(可选方法) Read more
Source§

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>

向指定位置写入数据(可选方法,用于 pwrite64/pwritev) Read more
Source§

fn ioctl(&self, _request: u32, _arg: usize) -> Result<isize, FsError>

执行设备特定的控制操作(可选方法,用于 ioctl) Read more
Source§

fn recvfrom(&self, _buf: &mut [u8]) -> Result<(usize, Option<Vec<u8>>), FsError>

从socket接收数据并获取源地址(可选方法,用于recvfrom) Read more

Auto Trait Implementations§

§

impl !Freeze for PipeFile

§

impl !RefUnwindSafe for PipeFile

§

impl Send for PipeFile

§

impl Sync for PipeFile

§

impl Unpin for PipeFile

§

impl !UnwindSafe for PipeFile

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.