error handle
This commit is contained in:
parent
5275afa66b
commit
4e9c962eaf
|
|
@ -146,16 +146,40 @@ void duplicate_output_to_log() {
|
|||
close(pipe_fds[1]); // 关闭写端
|
||||
char buffer[1024];
|
||||
ssize_t n;
|
||||
int has_error = 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)) {
|
||||
write(STDOUT_FILENO, buffer, n); // 输出到终端
|
||||
} else {
|
||||
// 不支持颜色输出时,直接输出内容
|
||||
write(STDOUT_FILENO, buffer, n);
|
||||
if (write(STDOUT_FILENO, buffer, n) == -1) {
|
||||
perror("Failed to write to stdout");
|
||||
}
|
||||
}
|
||||
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(log_fd);
|
||||
_exit(0);
|
||||
|
|
|
|||
BIN
intercept.so
BIN
intercept.so
Binary file not shown.
Loading…
Reference in New Issue