如何将串口日志重定向到当前终端

1、实现思路
利用函数ioctl( fd, TIOCCONS)来重新定义console终端

2、函数介绍
#include
char * ttyname(int desc);
获取desc对应的终端名称,其中desc为文件描述符。如果desc为STDOUT_FILENO,可以获取到当前终端的标准输出名称(/dev/pts/0)。

3、实现

#include
#include
#include
#include
#include
#include

int main(int argc, char *argv[])
{
int tty = -1;
char *tty_name = NULL;

if(argc < 2)
{
    printf("miss argumentn");
    return 0;
}

/* 获取当前tty名称 */
tty_name = ttyname(STDOUT_FILENO);
printf("tty_name: %sn", 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 argumentn");
    return 0;
}

close(tty);
return 0;

}

你可能感兴趣的:(linux,c++)