RegFile

Struct RegFile 

Source
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

§并发安全

offsetflagsowner 使用 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§

Source§

impl RegFile

Source

pub fn new(dentry: Arc<Dentry>, flags: OpenFlags) -> Self

创建新的 RegFile 实例

Source

pub fn inode(&self) -> Arc<dyn Inode>

获取底层 inode 引用 (用于某些系统调用)

Source

pub fn dentry(&self) -> Arc<Dentry>

获取底层 dentry 引用 (用于某些系统调用)

Source

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

设置文件状态标志 (F_SETFL)

只能修改部分标志,访问模式等不能被修改

Trait Implementations§

Source§

impl File for RegFile

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 lseek(&self, offset: isize, whence: SeekWhence) -> Result<usize, FsError>

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

fn offset(&self) -> usize

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

fn flags(&self) -> OpenFlags

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

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

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

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

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

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

设置文件状态标志(可选方法,用于 F_SETFL) 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 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 as_any(&self) -> &dyn Any

获取 Any trait 引用,用于安全的类型转换
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 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 RegFile

§

impl !RefUnwindSafe for RegFile

§

impl Send for RegFile

§

impl Sync for RegFile

§

impl Unpin for RegFile

§

impl !UnwindSafe for RegFile

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.