File

Trait File 

Source
pub trait File: Send + Sync {
Show 20 methods // Required methods fn readable(&self) -> bool; fn writable(&self) -> bool; fn read(&self, buf: &mut [u8]) -> Result<usize, FsError>; fn write(&self, buf: &[u8]) -> Result<usize, FsError>; fn metadata(&self) -> Result<InodeMetadata, FsError>; fn as_any(&self) -> &dyn Any; // Provided methods fn lseek( &self, _offset: isize, _whence: SeekWhence, ) -> Result<usize, FsError> { ... } fn offset(&self) -> usize { ... } fn flags(&self) -> OpenFlags { ... } fn dentry(&self) -> Result<Arc<Dentry>, FsError> { ... } fn inode(&self) -> Result<Arc<dyn Inode>, FsError> { ... } fn set_status_flags(&self, _flags: OpenFlags) -> Result<(), FsError> { ... } fn get_pipe_size(&self) -> Result<usize, FsError> { ... } fn set_pipe_size(&self, _size: usize) -> Result<(), FsError> { ... } fn get_owner(&self) -> Result<i32, FsError> { ... } fn set_owner(&self, _pid: i32) -> Result<(), FsError> { ... } fn read_at(&self, _offset: usize, _buf: &mut [u8]) -> Result<usize, FsError> { ... } fn write_at(&self, _offset: usize, _buf: &[u8]) -> Result<usize, FsError> { ... } fn ioctl(&self, _request: u32, _arg: usize) -> Result<isize, FsError> { ... } fn recvfrom( &self, _buf: &mut [u8], ) -> Result<(usize, Option<Vec<u8>>), FsError> { ... }
}
Expand description

文件操作的统一接口

所有打开的文件以 Arc<dyn File> 形式存储在进程的文件描述符表中。

§设计要点

  • 方法不携带 offset 参数,由实现者内部维护
  • 支持可 seek 文件(RegFile)和流式设备(PipeFile)
  • 可选方法提供默认实现(如 lseek 默认返回 NotSupported

Required Methods§

Source

fn readable(&self) -> bool

检查文件是否可读

Source

fn writable(&self) -> bool

检查文件是否可写

Source

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

从文件读取数据

RegFile 从当前 offset 读取并更新 offset; PipeFile 从管道缓冲区读取,无 offset 概念。

Source

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

向文件写入数据

RegFile 在 O_APPEND 模式下总是写到文件末尾。

Source

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

获取文件元数据

Source

fn as_any(&self) -> &dyn Any

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

Provided Methods§

Source

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

设置文件偏移量(可选方法)

默认返回 NotSupported,适用于流式设备。

Source

fn offset(&self) -> usize

获取当前偏移量(可选方法)

默认返回 0,适用于流式设备。

Source

fn flags(&self) -> OpenFlags

获取打开标志(可选方法)

用于 exec 时关闭 O_CLOEXEC 文件。

Source

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

获取目录项(可选方法)

默认返回FsError::NotSupported,适用于RegFile

Source

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

获取Inode(可选方法)

默认返回FsError::NotSupported,适用于RegFile

Source

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

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

默认返回 NotSupported,适用于不支持动态修改标志的文件类型

Source

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

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

默认返回 NotSupported,仅适用于 PipeFile

Source

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

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

默认返回 NotSupported,仅适用于 PipeFile

Source

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

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

返回接收 SIGIO 信号的进程 PID 默认返回 NotSupported

Source

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

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

设置接收 SIGIO 信号的进程 PID 默认返回 NotSupported

Source

fn read_at(&self, _offset: usize, _buf: &mut [u8]) -> Result<usize, FsError>

从指定位置读取数据(可选方法,用于 pread64/preadv)

不改变文件偏移量,默认返回 NotSupported,适用于非 seekable 文件

Source

fn write_at(&self, _offset: usize, _buf: &[u8]) -> Result<usize, FsError>

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

不改变文件偏移量,默认返回 NotSupported,适用于非 seekable 文件

Source

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

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

用于设备驱动程序特定的控制命令。

  • request: ioctl 请求码
  • arg: 参数指针(作为 usize 传递)

默认返回 NotSupported,仅由支持 ioctl 的设备类型实现

Source

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

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

返回(读取字节数, 源地址) 默认返回NotSupported,仅socket实现

Implementors§