Linux终端控制:探索TTYS层次的奥秘(linuxttys)

Linux 终端控制是一种强大的技术,它可以让我们更深入地控制终端以及与终端相关的所有东西,例如登录用户,vim编辑器等。本文将着重介绍TTYS层次的奥秘,深入了解TTY的主要组件以及它们是如何起作用的。

首先,我们来看看 TTY 的层次结构。图 1提供了一个简图,展示了TTY抽象层次结构:

![1.png](https://upload-images.jianshu.io/upload_images/5030629-190154b67a7bfa17.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

图 1:TTY抽象层次结构

从上面我们可以看出,TTY 基本上可以分为三个部分:

– TTY 设备驱动程序:这是低层次的硬件驱动程序,可以处理串口和终端等设备的输入输出,包括获取输入数据,控制发送数据以及更新设备的状态等。

– TTY 内核部分:包括管理 TTY 的和控制 TTY 之间的交互等使用的行为,以及实现 TTY 的特定的功能和选项等。

– 用户空间:它提供了 TTY 和用户对话的接口,它能够控制 TTY 的输入和输出,并实现了终端和终端控制程序之间的交互,所以可以在 Linux 命令行窗口中使用 TTY。

既然我们已经来了解 TTY 的层次结构,那么下面我们来看看如何使用代码来控制 TTY。 TTY设备驱动程序提供了一些内核级的接口,下面是有关 TTY 控制的代码,其中, tty_ioctl() 是用于 TTY 控制的内核函数:

“`c

int tty_ioctl (struct tty_struct * tty,

unsigned int cmd,

unsigned long arg)

{

switch (cmd) {

// 打开TTY

case TIOCSCTTY:

if (tty_paranoia_check(tty, current->tty, “tty_ioctl”))

return -EACCES;

if (current->signal->tty != tty &&

tty->session == NULL) {

if (!capable(CAP_SYS_ADMIN))

return -EPERM;

}

current->signal->tty = tty;

tty->session = current->signal;

tty->pgrp = process_group(current);

return 0;

// 关闭TTY

case TIOCCLOSE:

if (!capable(CAP_SYS_ADMIN))

return -EPERM;

tty_kref_put(tty);

return 0;

}

return -ENOIOCTLCMD;

}


这段代码实现了一个控制 TTY 的函数,既可以打开 TTY,也可以关闭 TTY,这在控制 TTY 时非常有用。

通过上述的内容,我们可以看出,TTY 层次的结构其实就是一种抽象的技术,可以把设备的输入输出抽象成一种更抽象的概念,并且通过编写相关的控制代码,更加轻松地控制 TTY 以及它有关的东西。

数据运维技术 » Linux终端控制:探索TTYS层次的奥秘(linuxttys)