From e13e8573810e4dfbf8de125cdc10a76a50c51bb3 Mon Sep 17 00:00:00 2001 From: guo_peixu Date: Thu, 23 Jun 2022 17:12:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8tty=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=BD=93=E5=89=8D=E7=BB=88=E7=AB=AF=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=EF=BC=8C=E5=B0=86=E6=97=A5=E5=BF=97=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E5=88=B0=E5=BD=93=E5=89=8D=E7=BB=88=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shm_consumer/MESA_shm_consumer.c | 44 ++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/shm_consumer/MESA_shm_consumer.c b/shm_consumer/MESA_shm_consumer.c index 9e4aba3..c574cf2 100644 --- a/shm_consumer/MESA_shm_consumer.c +++ b/shm_consumer/MESA_shm_consumer.c @@ -24,6 +24,8 @@ #define CONSUMER_CARE_PID_SPEC 1 #define CONSUMER_CARE_PID_MAX_LEN 128 +int g_cur_tty_fd = -1; + struct log_file_list{ char log_file_pre[MESA_SHM_LOG_PATH_LEN]; char real_log_file[MESA_SHM_LOG_PATH_LEN]; @@ -294,7 +296,9 @@ void consumer_ring_queue_to_terminal(struct MESA_shm_queue_head *head, int produ payload_len = *p_payload_len; payload = (char *)(p_payload_len + 1); n = snprintf(buf, sizeof(buf), "pid:%d, %s\n", producer_pid, payload); - write(STDOUT_FILENO, buf, n); + if(g_cur_tty_fd > 0){ + write(g_cur_tty_fd, buf, n); + } head->rd_idx = (head->rd_idx + 1) % head->blknum; } return ; @@ -482,7 +486,41 @@ void kill_old_process(char *process_name) pclose(fp); return ; } - +int get_cur_tty_fd() +{ + FILE *fp = NULL; + char cur_tty_name[DEFAUT_BUF_SIZE] = {0}; + char command[DEFAUT_BUF_SIZE] = {0}; + char *p = NULL; + int cur_tty_fd = -1; + snprintf(command, sizeof(command), "tty"); + fp = popen(command, "r"); + if(fp == NULL){ + return -1; + } + if((fgets(cur_tty_name, sizeof(cur_tty_name), fp)) != NULL){ + if(strncmp(cur_tty_name, "/dev/pts/", strlen("/dev/pts/")) != 0){ + goto error; + } + p = strchr(cur_tty_name, '\n'); + if(p == NULL){ + goto error; + } + *p = '\0'; + cur_tty_fd = open(cur_tty_name, O_WRONLY); + if(cur_tty_fd < 0){ + goto error; + } + }else{ + goto error; + } + pclose(fp); + return cur_tty_fd; + +error: + pclose(fp); + return -1; +} void print_help(char *exe_name) { @@ -510,6 +548,8 @@ int main(int argc, char **argv) kill_old_process(exe_name); if(g_output_mode == CONSUMER_OUTPUT_MODE_FILE){ consumer_daemo(); + }else{ + g_cur_tty_fd = get_cur_tty_fd(); } int i = 0; struct MESA_shm_overview *shm_overview = NULL;