08 - Linux终端与进程

news/2024/11/14 19:59:18/

---- 整理自狄泰软件唐佐林老师课程

查看所有文章链接:(更新中)Linux系统编程训练营 - 目录

文章目录

  • 1. 详解控制台与终端
    • 1.1 问题
    • 1.2 历史回顾
      • 1.2.1 控制台(Console)
      • 1.2.2 终端(Terminal)
    • 1.3 历史发展进程
    • 1.4 终端与进程
  • 2. 虚拟终端与伪终端
    • 2.1 各种终端类型
    • 2.2 内核终端模拟器
    • 2.3 伪终端模型
    • 2.4 伪终端(gnome-terminal)
  • 3. 伪终端程序设计原理
    • 3.1 伪终端程序设计(master)
    • 3.2 伪终端程序设计(slave)
    • 3.3 编程实验:实战伪终端程序设计

1. 详解控制台与终端

1.1 问题

  • Linux中的终端,控制台,TTY,PTY究竟是什么?它们与进程是什么关系?

1.2 历史回顾

1.2.1 控制台(Console)

控制台是一个直接控制设备的面板(属于设备的一部分)
计算机设备的控制台:按键 & 指示灯(键盘 & 显示器)
早期的电子计算机必然有一个控制台

1.2.2 终端(Terminal)

终端是一台独立于计算机的机器,是能够用来和计算机交互的设备
在这里插入图片描述
在这里插入图片描述

TTY,即:TeleType Writer电传打字机,一种终端设备

1.3 历史发展进程

– 电传打字机已经淘汰
– 计算机上的输入设备和显示设备从主机独立出来
– 控制台与终端的物理表现形式逐渐趋近
– 计算机开始支持多任务处理
– ……

  • 控制台 VS 终端
    • 控制台是计算机的基本组成部分
    • 终端是 连接 / 使用 计算机的附加设备
    • 计算机只有一个控制台,但可以有多个终端

注释:

  • 怎么区分控制台和终端?
  • 计算机系统启动的过程中,能够显示启动信息的是控制台,在启动过程中能够响应键盘输入的是控制台,终端需要等到计算机系统启动成功正常运行之后,才能够连接上计算机,才能够使用计算机。

1.4 终端与进程

  • TTY演变为Linux中的 抽象概念,对于进程而言,TTY是一种输入输出设备
    在这里插入图片描述

注释:TTY在内核中,运行于内核模式,可以与外设进行交互,外设为了成功地被进程所使用,就必须在驱动程序的层面上去满足TTY的抽象概念的要求( TTY规则 )。

2. 虚拟终端与伪终端

2.1 各种终端类型

在这里插入图片描述

2.2 内核终端模拟器

在这里插入图片描述

2.3 伪终端模型

在这里插入图片描述

2.4 伪终端(gnome-terminal)

在这里插入图片描述
注释:gnome-terminal是一个进程

在这里插入图片描述
在这里插入图片描述

3. 伪终端程序设计原理

3.1 伪终端程序设计(master)

  • 创建 PTY 主从设备:master = posix_openpt(O_RDWR);
    • master 主设备标识
  • 获取主设备权限:
    • grantpt(master); // 获取设备使用权限
    • unlockpt(master); // 解锁设备,为读写做准备
  • 读写主设备
    • c = read(master, &rx, 1);
    • len = write(master, txbuf, strlen(txbuf));
    • ptsname(…)获取伪终端从设备的名字

在这里插入图片描述
在这里插入图片描述

3.2 伪终端程序设计(slave)

  • 打开 PTY 从设备:slave = open(path_to_slave, O_RDWR);
  • 读写从设备:
    • write(slave, “Delphi\r”, 7);
    • read(slave, buf, sizeof(buf)-1);

在这里插入图片描述

3.3 编程实验:实战伪终端程序设计

【参看链接】:08 - Linux终端与进程 / 08

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/50719.html

相关文章

Android Framework—Service

介绍 Service是一种可以在后台执行长时间运行操作而不提供界面的应用组件。服务可以由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可以通过绑定到服务与之进行交互,甚至是执行进程之间的通信…

TCP协议的相关特性(续)

TCP协议的相关特性 🔎滑动窗口🔎流量控制🔎拥塞控制🔎延时应答🔎捎带应答🔎面向字节流(粘包问题)🔎异常情况🔎总结 关于 确认应答 超时重传, 连接管理 请参考: 点击这里 &#x1f5…

Linux内存管理(二十三):CMA 分配器详解

源码基于:Linux 5.4 0.前言 CMA(Contiguous Memory Allocator),称为连续内存分配器,用于分配连续的大块内存。 在启动过程中,从整个 memory 中配置一段连续的内存用于CMA(Reserved memory), 设备驱动不用时,内存管理系统将该区域用于分配和管理可移动类型页面;设备…

Python算法设计 - 哈夫曼编码

目录 一、哈夫曼树二、哈夫曼编码三、Python算法实现四、作者Info 一、哈夫曼树 上图是根据“this is an example of a huffman tree”中得到的字母频率来建构的哈夫曼树 二、哈夫曼编码 多年来,哈夫曼编码在统计数据压缩方面是非常先进的,应当指出&am…

都说程序员就是吃青春饭,35岁就会被淘汰,我用自己的经历来告诉你事实

上个假期我回家了,遇到三姑六婆总会问我读研没读、工作怎么样、薪资多少等等问题,相信大家也都遇到过。我一般会用“在做程序员,写代码的这种话”来敷衍他们,但没想到他们懂得还挺多的,又搬出了一套关于程序员的理论&a…

strace 命令详解

一、strace 是什么? 按照 strace 官网的描述,strace 是一个可用于诊断、调试和教学的 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。 strace 底层使用内核的 ptrace 特性来实现其功能。 在运维的日常工作中,故…

Mybatis-Plus -04 条件构造器与代码生成器

Mybatis-Plus--条件构造器与代码生成器 1 条件构造器1.1 > < 1.2 in notin1.3 between...1.4 orderBy...1.5 like... 2 代码生成器2.1 引入依赖2.2 生成器代码 1 条件构造器 通过条件构造器可以更加轻松的完成条件查询与更新(底层就是动态SQL) 1.1 > < ge 小于 &l…

【状态估计】电力系统状态估计的虚假数据注入攻击建模与对策(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…