pub struct RegFile {
pub dentry: Arc<Dentry>,
pub inode: Arc<dyn Inode>,
offset: SpinLock<usize>,
flags: SpinLock<OpenFlags>,
owner: SpinLock<Option<i32>>,
}Expand description
普通文件的 File 实现
对底层 Inode 的会话包装,维护:
- 当前文件偏移量(offset)
- 打开标志位(O_RDONLY/O_WRONLY/O_APPEND 等)
- 异步 I/O 所有者 PID
§并发安全
offset、flags 和 owner 使用 SpinLock 保护,因为多线程可能通过 fork() 共享同一个 fd。
Fields§
§dentry: Arc<Dentry>关联的 dentry (保留,用于某些操作如 fstat)
inode: Arc<dyn Inode>关联的 inode (缓存,避免每次从 dentry 获取)
offset: SpinLock<usize>当前文件偏移量 (需要锁保护,因为多线程可能共享 fd)
flags: SpinLock<OpenFlags>打开标志位 (需要锁保护以支持 F_SETFL)
owner: SpinLock<Option<i32>>异步 I/O 所有者 PID (接收 SIGIO 信号的进程)
Implementations§
Trait Implementations§
Source§impl File for RegFile
impl File for RegFile
Source§fn metadata(&self) -> Result<InodeMetadata, FsError>
fn metadata(&self) -> Result<InodeMetadata, FsError>
获取文件元数据
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 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 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
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