命名管道系统调用以及文件系统兼容特殊文件类型的接口 (#397)

* 修复pipe2在读端或写端关闭后还阻塞问题。

* 实现命名管道机制,增加特殊文件类型兼容普通文件系统的接口。

* 普通文件系统能够适配特殊文件(命名管道等)
This commit is contained in:
GnoCiYeH
2023-10-09 00:28:08 +08:00
committed by GitHub
parent 34e6d6c80f
commit 2dbef7859f
15 changed files with 649 additions and 20 deletions

View File

@ -7,11 +7,11 @@ use num_traits::{FromPrimitive, ToPrimitive};
use crate::{
arch::{cpu::cpu_reset, interrupt::TrapFrame, MMArch},
driver::base::block::SeekFrom,
driver::base::{block::SeekFrom, device::DeviceNumber},
filesystem::vfs::{
fcntl::FcntlCommand,
file::FileMode,
syscall::{PosixKstat, SEEK_CUR, SEEK_END, SEEK_MAX, SEEK_SET},
syscall::{ModeType, PosixKstat, SEEK_CUR, SEEK_END, SEEK_MAX, SEEK_SET},
MAX_PATHLEN,
},
include::bindings::bindings::{PAGE_2M_SIZE, PAGE_4K_SIZE},
@ -375,6 +375,7 @@ pub const SYS_GETPGID: usize = 50;
pub const SYS_FCNTL: usize = 51;
pub const SYS_FTRUNCATE: usize = 52;
pub const SYS_MKNOD: usize = 53;
#[derive(Debug)]
pub struct Syscall;
@ -973,6 +974,14 @@ impl Syscall {
res
}
SYS_MKNOD => {
let path = args[0];
let flags = args[1];
let dev_t = args[2];
let flags: ModeType = ModeType::from_bits_truncate(flags as u32);
Self::mknod(path as *const i8, flags, DeviceNumber::from(dev_t))
}
_ => panic!("Unsupported syscall ID: {}", syscall_num),
};