欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux系统进程打印重定向实现

程序员文章站 2022-03-25 09:09:18
...

    实现打印重定向到当前CRT控制台能有效提高调试debug效率,记录下最近工作中实现的打印重定向功能。基于之前的程序状态监测系统实现,分客户端和服务端;
    客户端接收用户命令,确认是否需要重定向,代码如下:

    char *tty_name = NULL;
    if(is_str_equal(cmd_line, "tty"))
    {
        /* 获取当前tty名称 */
        tty_name = ttyname(STDOUT_FILENO);
        sprintf(argv[1], "tty:%s",tty_name);
    }

    上文提到的程序状态监测系统会将argv[1]传到服务端,服务端在接收到命令需要重定向时将glogRedirect标志位置1,然后在打印函数中添加如下代码:

        if(glogRedirect)
        {
            /* 重定向console到当前tty */
            tty = open(gttyname, O_RDONLY | O_WRONLY);
            if(tty >= 0)
            {
                ioctl(tty, TIOCCONS);
                close(tty);
            }

            vprintf(pFmt, args);
            
            /* 恢复console */
            if(tty >= 0)
            {
                tty = open("/dev/console", O_RDONLY | O_WRONLY);
                if(tty >= 0)
                {
                    ioctl(tty, TIOCCONS);
                    close(tty);
                }
            }
        }
        else
        {
            vprintf(pFmt, args);
        }

    自此,代码中每次运行到打印函数时都会进入该流程,进入打印重定向流程。

相关标签: 重定向