diff --git a/kernel/src/filesystem/ramfs/mod.rs b/kernel/src/filesystem/ramfs/mod.rs index 3dd893b9..e2cef7c7 100644 --- a/kernel/src/filesystem/ramfs/mod.rs +++ b/kernel/src/filesystem/ramfs/mod.rs @@ -114,6 +114,33 @@ impl RamFS { } impl IndexNode for LockedRamFSInode { + fn truncate(&self, len: usize) -> Result<(), SystemError> { + let mut inode = self.0.lock(); + + //如果是文件夹,则报错 + if inode.metadata.file_type == FileType::Dir { + return Err(SystemError::EINVAL); + } + + //当前文件长度大于_len才进行截断,否则不操作 + if inode.data.len() > len { + inode.data.resize(len, 0); + } + return Ok(()); + } + + fn close(&self, _data: &mut FilePrivateData) -> Result<(), SystemError> { + return Ok(()); + } + + fn open( + &self, + _data: &mut FilePrivateData, + _mode: &super::vfs::file::FileMode, + ) -> Result<(), SystemError> { + return Ok(()); + } + fn read_at( &self, offset: usize,