概述
在嵌入式Linux系统中,有时通过远程(telnet或者ssh)登录到现场设备,想看程序的实时打印的调试信息,需要将输出到串口的调试信息重定向到当前登录的终端界面上。
也可以将程序重新启动到当前终端界面,但是在程序出现问题时,如果重启程序,可能会破坏了问题现场,再查找问题就不好查找了。
下面是实现的代码,可以将输出到串口的日志信息,重定向到当前的telnet或者ssh界面上,是不是很神奇!
实现代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/ioctl.h> #include <unistd.h> int main(int argc, char *argv[]) { int tty = -1; char *tty_name = NULL; if(argc < 2) { printf("miss argument\n"); return 0; } /* 获取当前tty名称 */ tty_name = ttyname(STDOUT_FILENO); printf("tty_name: %s\n", tty_name); if(!strcmp(argv[1], "on")) { /* 重定向console到当前tty */ tty = open(tty_name, O_RDONLY | O_WRONLY); ioctl(tty, TIOCCONS); perror("ioctl TIOCCONS"); } else if(!strcmp(argv[1], "off")) { /* 恢复console */ tty = open("/dev/console", O_RDONLY | O_WRONLY); ioctl(tty, TIOCCONS); perror("ioctl TIOCCONS"); } else { printf("error argument\n"); return 0; } close(tty); return 0; }
编译运行
编译
gcc log.c -o log
运行
./log on #重定向日志输出到当前终端界面 ./log off #恢复日志输出到调试串口