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§
Sourcefn read(&self, buf: &mut [u8]) -> Result<usize, FsError>
fn read(&self, buf: &mut [u8]) -> Result<usize, FsError>
从文件读取数据
RegFile 从当前 offset 读取并更新 offset; PipeFile 从管道缓冲区读取,无 offset 概念。
Sourcefn metadata(&self) -> Result<InodeMetadata, FsError>
fn metadata(&self) -> Result<InodeMetadata, FsError>
获取文件元数据
Provided Methods§
Sourcefn lseek(&self, _offset: isize, _whence: SeekWhence) -> Result<usize, FsError>
fn lseek(&self, _offset: isize, _whence: SeekWhence) -> Result<usize, FsError>
设置文件偏移量(可选方法)
默认返回 NotSupported,适用于流式设备。
Sourcefn dentry(&self) -> Result<Arc<Dentry>, FsError>
fn dentry(&self) -> Result<Arc<Dentry>, FsError>
获取目录项(可选方法)
默认返回FsError::NotSupported,适用于RegFile
Sourcefn inode(&self) -> Result<Arc<dyn Inode>, FsError>
fn inode(&self) -> Result<Arc<dyn Inode>, FsError>
获取Inode(可选方法)
默认返回FsError::NotSupported,适用于RegFile
Sourcefn set_status_flags(&self, _flags: OpenFlags) -> Result<(), FsError>
fn set_status_flags(&self, _flags: OpenFlags) -> Result<(), FsError>
设置文件状态标志(可选方法,用于 F_SETFL)
默认返回 NotSupported,适用于不支持动态修改标志的文件类型
Sourcefn get_pipe_size(&self) -> Result<usize, FsError>
fn get_pipe_size(&self) -> Result<usize, FsError>
获取管道大小(可选方法,用于 F_GETPIPE_SZ)
默认返回 NotSupported,仅适用于 PipeFile
Sourcefn set_pipe_size(&self, _size: usize) -> Result<(), FsError>
fn set_pipe_size(&self, _size: usize) -> Result<(), FsError>
设置管道大小(可选方法,用于 F_SETPIPE_SZ)
默认返回 NotSupported,仅适用于 PipeFile
Sourcefn get_owner(&self) -> Result<i32, FsError>
fn get_owner(&self) -> Result<i32, FsError>
获取异步 I/O 所有者(可选方法,用于 F_GETOWN)
返回接收 SIGIO 信号的进程 PID
默认返回 NotSupported
Sourcefn set_owner(&self, _pid: i32) -> Result<(), FsError>
fn set_owner(&self, _pid: i32) -> Result<(), FsError>
设置异步 I/O 所有者(可选方法,用于 F_SETOWN)
设置接收 SIGIO 信号的进程 PID
默认返回 NotSupported
Sourcefn 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)
不改变文件偏移量,默认返回 NotSupported,适用于非 seekable 文件
Sourcefn write_at(&self, _offset: usize, _buf: &[u8]) -> Result<usize, FsError>
fn write_at(&self, _offset: usize, _buf: &[u8]) -> Result<usize, FsError>
向指定位置写入数据(可选方法,用于 pwrite64/pwritev)
不改变文件偏移量,默认返回 NotSupported,适用于非 seekable 文件