pub struct FDTable {
files: SpinLock<Vec<Option<Arc<dyn File>>>>,
fd_flags: SpinLock<Vec<FdFlags>>,
max_fds: usize,
}Expand description
Fields§
§files: SpinLock<Vec<Option<Arc<dyn File>>>>文件描述符数组 None 表示该 FD 未使用
fd_flags: SpinLock<Vec<FdFlags>>文件描述符标志数组(与 files 索引对应) 默认值为 FdFlags::empty()
max_fds: usize最大文件描述符数量
Implementations§
Source§impl FDTable
impl FDTable
Sourcepub fn alloc_with_flags(
&self,
file: Arc<dyn File>,
flags: FdFlags,
) -> Result<usize, FsError>
pub fn alloc_with_flags( &self, file: Arc<dyn File>, flags: FdFlags, ) -> Result<usize, FsError>
分配一个新的文件描述符并指定 FD 标志
Sourcepub fn install_at(&self, fd: usize, file: Arc<dyn File>) -> Result<(), FsError>
pub fn install_at(&self, fd: usize, file: Arc<dyn File>) -> Result<(), FsError>
在指定的 FD 位置安装文件(默认无 FD 标志)
Sourcepub fn install_at_with_flags(
&self,
fd: usize,
file: Arc<dyn File>,
flags: FdFlags,
) -> Result<(), FsError>
pub fn install_at_with_flags( &self, fd: usize, file: Arc<dyn File>, flags: FdFlags, ) -> Result<(), FsError>
在指定的 FD 位置安装文件并指定 FD 标志
Sourcepub fn dup(&self, old_fd: usize) -> Result<usize, FsError>
pub fn dup(&self, old_fd: usize) -> Result<usize, FsError>
复制文件描述符
返回新的 fd,与 old_fd 指向同一个 Arc<dyn File> (共享 offset)。
Sourcepub fn dup_from(
&self,
old_fd: usize,
min_fd: usize,
flags: FdFlags,
) -> Result<usize, FsError>
pub fn dup_from( &self, old_fd: usize, min_fd: usize, flags: FdFlags, ) -> Result<usize, FsError>
复制文件描述符,新 fd >= min_fd(F_DUPFD 语义)
返回新的 fd,与 old_fd 指向同一个 Arc<dyn File> (共享 offset)。
新分配的 fd 是 >= min_fd 的最小未使用文件描述符。
Sourcepub fn dup2(&self, old_fd: usize, new_fd: usize) -> Result<usize, FsError>
pub fn dup2(&self, old_fd: usize, new_fd: usize) -> Result<usize, FsError>
复制文件描述符到指定位置
如果 new_fd 已打开,先关闭它。
Sourcepub fn dup3(
&self,
old_fd: usize,
new_fd: usize,
flags: OpenFlags,
) -> Result<usize, FsError>
pub fn dup3( &self, old_fd: usize, new_fd: usize, flags: OpenFlags, ) -> Result<usize, FsError>
复制文件描述符到指定位置(dup3 语义)
如果 new_fd 已打开,先关闭它。 与 dup2 不同,dup3 不允许 old_fd == new_fd。
§参数
flags: 可以包含O_CLOEXEC,用于设置新 FD 的 CLOEXEC 标志
Sourcepub fn clone_table(&self) -> Self
pub fn clone_table(&self) -> Self
克隆整个文件描述符表(用于 fork)
所有 Arc<dyn File> 引用计数递增,父子进程共享文件对象。
FD 标志也会被复制。
Sourcepub fn close_exec(&self)
pub fn close_exec(&self)
关闭所有带有 CLOEXEC 标志的文件(用于 exec)
Sourcepub fn get_fd_flags(&self, fd: usize) -> Result<FdFlags, FsError>
pub fn get_fd_flags(&self, fd: usize) -> Result<FdFlags, FsError>
获取文件描述符标志 (F_GETFD)
Sourcepub fn set_fd_flags(&self, fd: usize, flags: FdFlags) -> Result<(), FsError>
pub fn set_fd_flags(&self, fd: usize, flags: FdFlags) -> Result<(), FsError>
设置文件描述符标志 (F_SETFD)