修复tty的buf满时始终阻塞的问题 (#493)

* 修复tty的buf满时始终阻塞的问题
This commit is contained in:
裕依2439 2024-01-23 23:36:52 +08:00 committed by GitHub
parent 43ef2a0d2b
commit d46c6d2794
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 22 additions and 5 deletions

View File

@ -197,18 +197,35 @@ impl IndexNode for TtyDevice {
self.check_rw_param(len, buf)?;
let mut cnt: usize = 0;
// 根据当前文件是stdout还是stderr,选择不同的发送方式
let r: Result<usize, TtyError> = if data.flags.contains(TtyFileFlag::STDOUT) {
self.core.stdout(&buf[0..len], true)
loop {
let r = self.core.stdout(&buf[cnt..len], false);
if let Err(TtyError::BufferFull(c)) = r {
self.sync().expect("Failed to sync tty device!");
cnt += c;
} else {
break r;
}
}
} else if data.flags.contains(TtyFileFlag::STDERR) {
self.core.stderr(&buf[0..len], true)
loop {
let r = self.core.stderr(&buf[cnt..len], false);
if let Err(TtyError::BufferFull(c)) = r {
self.sync().expect("Failed to sync tty device!");
cnt += c;
} else {
break r;
}
}
} else {
return Err(SystemError::EPERM);
};
if r.is_ok() {
self.sync().expect("Failed to sync tty device!");
return Ok(r.unwrap());
return Ok(cnt + r.unwrap());
}
let r: TtyError = r.unwrap_err();

View File

@ -823,8 +823,8 @@ impl ProcessControlBlock {
pub fn generate_name(program_path: &str, args: &Vec<String>) -> String {
let mut name = program_path.to_string();
for arg in args {
name.push_str(arg);
name.push(' ');
name.push_str(arg);
}
return name;
}

View File

@ -74,7 +74,7 @@ if [ ! -f "${root_folder}/bin/${DISK_NAME}" ]; then
--bios)
case "$2" in
uefi)
sudo ARCH=${ARCH} bash ./create_hdd_image.sh -P MBR #GPT分区
sudo ARCH=${ARCH} bash ./create_hdd_image.sh -P MBR #GPT分区 用GPT分区uefi启动不了 内核没有针对gpt分区表来做处理
;;
legacy)
sudo ARCH=${ARCH} bash ./create_hdd_image.sh -P MBR #MBR分区