为什么在telnet登入界面下没有日志输出?

1、每个进程的输入输出导向目标都可以在进程号下的fd软链接上查看。如

 569号进程的输出目标是/dev/console,即串口。其中0是标准输入,1是标准输出,2是标准错误输出。

2、因此我们只需要查看telnet进程,fd的0,1,2号软链接的情况即可。

从图中可以看出,内容输出直接导向到/dev/null,即全部抛弃。

3、那么问题来了,如何将进程的输出给导向到telnet界面呢?

3.1、每增加一路telnet连接,系统就会在/dev/pts目录下创建设备节点。

 

3.2、因此只需要把进程的fd 0,1,2软链接到对应telnet的节点下,如/dev/pts/0

为什么在telnet登入界面下没有日志输出?_第1张图片4、代码实现

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

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;
}

 

 

你可能感兴趣的:(其他,linux)