概述
在嵌入式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 #恢復日志輸出到調試串口
歡迎關注個人微信公眾號: