error handle

This commit is contained in:
Pan Qiancheng 2025-03-26 16:58:16 +08:00
parent 5275afa66b
commit 4e9c962eaf
2 changed files with 29 additions and 5 deletions

View File

@ -146,16 +146,40 @@ void duplicate_output_to_log() {
close(pipe_fds[1]); // 关闭写端 close(pipe_fds[1]); // 关闭写端
char buffer[1024]; char buffer[1024];
ssize_t n; ssize_t n;
int has_error = 0;
while ((n = read(pipe_fds[0], buffer, sizeof(buffer))) > 0) { while ((n = read(pipe_fds[0], buffer, sizeof(buffer))) > 0) {
// 检查buffer中是否包含错误信息
if (strstr(buffer, "error") || strstr(buffer, "Error") || strstr(buffer, "ERROR")) {
has_error = 1;
}
// 输出到终端时保留颜色 // 输出到终端时保留颜色
if (isatty(STDOUT_FILENO)) { if (isatty(STDOUT_FILENO)) {
write(STDOUT_FILENO, buffer, n); // 输出到终端 if (write(STDOUT_FILENO, buffer, n) == -1) {
} else { perror("Failed to write to stdout");
// 不支持颜色输出时,直接输出内容 }
write(STDOUT_FILENO, buffer, n); }
if (write(log_fd, buffer, n) == -1) {
perror("Failed to write to log file");
} }
write(log_fd, buffer, n); // 写入日志
} }
if (has_error) {
char response[10];
printf("\n检测到命令执行出错是否立即上报BM论坛(Y/N): ");
fflush(stdout); // 确保提示文字被输出
if (fgets(response, sizeof(response), stdin) != NULL) {
response[strcspn(response, "\n")] = '\0'; // 去掉换行符
if (response[0] == 'Y' || response[0] == 'y') {
printf("上报成功\n");
} else {
printf("取消上报\n");
}
}
}
close(pipe_fds[0]); close(pipe_fds[0]);
close(log_fd); close(log_fd);
_exit(0); _exit(0);

Binary file not shown.