【Linux C | 终端设备】Linux下 tty、ttyS*、ttyAMA*、console 的区别,以及系统输出重定向(附带代码)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
⏰发布时间⏰: 2024-09-11 15:08:27

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、概念区别
    • ✨2.1 /dev/tty*
    • ✨2.2 /dev/ttyS*
    • ✨2.3 /dev/ttyAMA*
    • ✨2.4 /dev/console
    • ✨2.5 /dev/pts/*
  • 🎄三、系统输出重定向
    • ✨3.1 预备知识
    • ✨3.2 输出重定向代码实现
  • 🎄四、总结

在这里插入图片描述


在这里插入图片描述

🎄一、概述

在 Linux 系统中,有几个常见的终端设备名称,如 tty*ttyS*ttyAMA*console。这些设备在系统中扮演着不同的角色,对于理解 Linux 系统的输入输出和用户交互至关重要。

几种设备的介绍:

  • 控制台终端(console):指计算机的输出设备, 通常是printk信息输出的设备,对应到/dev/console 文件;
  • 控制终端(controlling terminal):代表当前tty设备,对应到 /dev/tty文件;
  • 虚拟控制台终端:仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:/dev/tty0/dev/tty1/dev/tty2 等。其中/dev/tty0会指向当前所使用虚拟终端,类似于别名;
  • 串行端口终端(serial port terminal):指使用计算机串行端口连接的终端设备,一般对应到/dev/ttySn文件。但在某些ARM架构处理器的系统中,则是对应到/dev/ttyAMAn文件;
  • 伪终端(pseudo terminal):通常是通过ssh登陆的终端,对应到/dev/pts/*文件。

针对 tty 设备,可以在终端输入 tty 命令查看当前tty设备(终端)名称:

tty

在这里插入图片描述


Linux系统中,还可使用下面命令,查看登录到本系统的所有 tty 设备:

who

在这里插入图片描述

怎么理解 控制台 和 终端:
在监控系统中,一般有个监控室,这就类似于控制台;但有时使用手机也可以查看监控,这个手机就类似于终端。


在这里插入图片描述

🎄二、概念区别

✨2.1 /dev/tty*

tty 的全称是TeleTYpe,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。在 Linux 中,tty 设备通常代表一个物理或虚拟终端。它可以是一个本地终端连接到系统,也可以是一个通过网络连接的远程终端。终端是一种字符型设备,它有多种类型,通常使用 tty 来简称各种类型的终端设备。

  • /dev/tty:控制终端(controlling terminal),会指向 当前tty设备。你在终端输入下面命令都会打印到当前终端窗口;

    echo "abc" > /dev/tty
    

    在这里插入图片描述

  • /dev/tty0:在 Linux 系统中,/dev/tty0 指向 当前虚拟控制台设备,通常与系统的图形终端或第一个文本终端相关联。你在一个虚拟终端(/dev/tty*)输入下面命令会直接打印到当前窗口,只有系统或超级用户root可以向 /dev/tty0 进行写操作:

    echo "abc" > /dev/tty0
    

    在这里插入图片描述

  • /dev/tty1 ~ /dey/tty63:在 Linux 系统中,通常代表独立的 虚拟控制台终端/dev/tty1 表示第一个虚拟控制台终端,可以通过按下特定的组合键(如 Ctrl+Alt+F1Ctrl+Alt+F2 等)来切换到这些终端。每个这样的终端都是一个独立的用户会话,可以由不同的用户登录和使用。
    在这里插入图片描述


✨2.2 /dev/ttyS*

ttyS*设备,全称TeleTYpe Serial,这些是 串行端口终端(Serial Port Terminal)设备。在过去,串口是连接外部设备(如调制解调器、打印机、终端等)的常见方式。

串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为 那时它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0), /dev/tts/1(或/dev/ttyS1)等,设备号分别是(4,0), (4,1)等,分别对应于DOS系统下的COM1、COM2等。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。例如, 在命令行提示符下键入:echo test > /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。可接串口来实验。


✨2.3 /dev/ttyAMA*

ttyAMA0 是ARM特定的 串行端口设备 文件,表示某些ARM架构处理器(如Broadcom SoC中的UART接口)。会关联到ARM处理器的内置UART接口。/dev/ttyAMA0 是第一个ARM特定的UART设备,其他类似的设备可能有不同的名称


✨2.4 /dev/console

/dev/console是 Linux 系统的 控制台。在系统启动时显示内核消息和系统日志的主要设备。它通常是一个物理终端设备,直接连接到系统的硬件。

在系统出现严重问题时,控制台是获取关键信息的重要途径。即使系统的其他部分出现故障,控制台通常仍然可以访问,以便进行故障排除和恢复操作。


✨2.5 /dev/pts/*

/dev/pts/*通常代表 伪终端设备。伪终端在很多情况下用于模拟物理终端的行为,例如在网络连接中,当你使用 SSH 连接到远程服务器时,服务器端会为你的连接分配一个伪终端设备,通常命名为 /dev/pts/*(其中 * 是一个数字)。

作用:伪终端在实现远程登录、终端复用器(如 screen 和 tmux)等方面起着关键作用。它们允许在不同的进程之间进行终端输入输出的模拟和传递。

在使用 ssh 的终端,输入 tty 查看当前tty设备名称如下:
在这里插入图片描述


在这里插入图片描述

🎄三、系统输出重定向

从上面可以得知,LInux系统的一些系统消息、系统日志都会 /dev/console 打印,在arm开发板中,通常可以以设置内核命令行参数的形式将 /dev/console 文件关联到串口中,这样有利于程序调试阶段从串口查看打印,命令行参数格式一般如下:

console=ttyAMA0,115200n8

在这里插入图片描述

但是有些时候,我们希望在所登录的终端就可以查看系统消息、系统日志等输出打印,Linux 针对 tty 设备提供了 输出重定向 的功能,可以将 /dev/console 重定向(Redirecting) 到其他 tty 设备。下面就来看看怎么实现。

✨3.1 预备知识

  • ttyname
    首先,认识一个函数 ttyname,可以在Ubuntu输入man ttyname查看更多内容,这个函数返回一个指针,指向文件描述符fd上打开的终端设备的以空结尾的路径名,或者在错误时返回NULL(例如,如果fd没有连接到终端)。

  • TIOCCONS
    这是用于终端的 ioctl 函数的一个接口,可以Ubuntu输入man tty ioctl查看更多内容。
    TIOCCONS会将本来会到/dev/console/dev/tty0的输出重定向到给定的终端。如果这是一个伪终端主服务器,将其发送到从服务器。
    如果输出已经被重定向,返回EBUSY,但是可以通过使用这个ioctl来停止重定向,fd指向/dev/console/dev/tty0
    在2.6.10版本之前的Linux中,只要没有重定向输出,任何人都可以这样做;从2.6.10版本开始,只有具有CAP_SYS_ADMIN功能的进程才能执行此操作。


✨3.2 输出重定向代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>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系统中,tty、ttyS*、ttyAMA*、console 的区别,以及系统输出重定向,最后给出了系统输出重定向的例子代码。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

参考:
在Linux中,ttyS0、ttyUSB0和ttyAMA0有什么区别?
Linun开发总结之串口日志重定向
Linux中tty、pty、pts的概念区别
Linux TTY基本概念之ttys*、tty*、ttyS*、console理解
Linux下的consolen(控制台)和terminal(终端)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/421387.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RickdiculouslyEasy-CTF-综合靶场

步骤一&#xff1a;利用Goby搜索靶机地址 步骤二&#xff1a;访问靶机地址 步骤二&#xff1a;扫描端口 nmap 172.16.1.7 -p 1-65535 步骤三&#xff1a; 扫描目录 dirsearch -u http://172.16.1.7/ 第一个flag&#xff1a;命令&#xff1a;nmap -A -v -T4 172.16.1.7 -p 1-6…

RK3576芯片在智能家居里中型智慧屏产品的应用方案分析

智能家居在近年来得到了快速发展&#xff0c;AI技术不断发展&#xff0c;人机交互十分成熟&#xff0c;各种家电也都迎来了智能化浪潮&#xff0c;智能家居为人们提供了优秀的产品体验&#xff0c;受到主流消费者的青睐&#xff0c;智能家居里的中型智慧屏产品也随之兴起。 瑞芯…

2024最新盘点,主流生产报工软件有哪些?

本文将盘点知名的生产报工软件&#xff0c;为企业选型提供参考&#xff01; 各位生产经理有没有碰到过这种情况&#xff0c;产品生产从工单-报工-质检-入库的过程中不能实时知道任务进度&#xff0c;生产日报也不清晰&#xff0c;老是被客户催&#xff0c;上头领导不满意&…

Netty权威指南:Netty总结-编解码与序列化

第四章 TCP粘包/拆包问题 4.1 TCP 粘包/拆包 TCP是流协议&#xff0c;也就是没有界限的的一串数据&#xff0c;底层并不知道上层业务数据的具体含义&#xff0c;也就是说一个完整的包可能会被拆分成多个包进行发送&#xff0c;也可能把几个小包封装成一个大的数据包发送。这就…

自注意力机制 SANS(论文复现)

自注意力机制 SANS&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 前言 在NLP模型领域中&#xff0c;seq2seq是一种常见的模型结构&#xff08;序列到序列&#xff09;&#xff0c;其于 2013年、2014 年被多位学者共同提出&#xff0c;在机器翻译…

《Learning to Prompt for Vision-Language Models》CoOp论文中文校对版

系列论文研读目录 文章目录 系列论文研读目录摘要1 简介2 相关工作2.1视觉语言模型2.2 NLP中的提示学习 3 方法论3.1视觉语言预训练3.2上下文优化3.3讨论 4 实验4.1少数学习4.2领域泛化4.3进一步分析 5 结论、局限性和未来的工作 摘要 像CLIP这样的大型预训练视觉语言模型在学…

天通报警呼叫柱:为边防哨所筑起坚固的通信堡垒

一、背景 边防哨所是国家安全的重要防线&#xff0c;肩负着守护边境安全、维护国家主权和领土完整的神圣使命。由于边防哨所通常位于地理位置偏远、环境恶劣的地区&#xff0c;通信问题成为影响边防工作的重要因素&#xff0c;给边防官兵的日常工作和应急响应带来了不小的挑战…

Vue 3 watchEffect:如何用 onInvalidate 优化副作用处理

在 Vue3 中&#xff0c;watchEffect 是一个用于在响应式数据变化时自动重新执行的函数。它在创建响应式副作用时特别有用&#xff0c;比如在某些数据变化时更新 DOM、发起网络请求或处理复杂的逻辑。 watchEffect 的 onInvalidate 是一个非常重要的功能&#xff0c;用于处理副…

blender我的对称模型好像中点被我不小心移动了 我现在如果雕刻 两边修改的地方不是对称的 我该怎么办

blender我的对称模型好像中点被我不小心移动了 我现在如果雕刻 两边修改的地方不是对称的 我该怎么办 首先请调整好模型确保左右前后对其相应的xyz轴 之后CtrlA应用变换 确保这些都归0且模型和xyz轴对应 如果在Blender中模型的中点&#xff08;对称轴&#xff09;不小心被移动了…

使用豆包MarsCode 编写 Node.js 全栈应用开发实践

以下是「豆包MarsCode 体验官」优秀文章&#xff0c;作者狼叔。 欢迎更多用户使用豆包MarsCode 并分享您的产品使用心得及反馈、创意项目开发等&#xff0c;【有奖征集&#xff5c;人人都是豆包MarsCode 测评官&#xff01;】活动正在火热进行中&#xff0c;欢迎大家投稿参加&a…

6-Python基础编程之数据类型操作——数值、布尔和字符串

Python基础编程之数据类型操作——数值、布尔和字符串 数值整数浮点数复数常用操作 布尔类型字符串字符串拼接字符串切片常用函数查找计算转换操作填充压缩分割拼接判定操作 数值 表现形式&#xff1a;整数&#xff08;int&#xff09;、浮点数&#xff08;float&#xff09;、…

校园管理|基于springboot+vue的校园管理系统(源码+数据库+文档)

校园管理|校园管理系统 目录 基于springbootvue的校园管理系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c…

自动化表格处理的革命:智能文档系统技术解析

在当今数据驱动的商业环境中&#xff0c;表格数据的自动化处理成为了企业提高效率、降低成本的关键。企业智能文档系统在智能表格识别方面展现出卓越的性能&#xff0c;通过精准识别和处理各种通用表格&#xff0c;显著提升了企业文档管理的智能化水平。本文将深入探讨该系统在…

[产品管理-6]:NPDP新产品开发 - 4 - 战略 - 创新支持战略,支持组织的总体创新战略(平台战略、技术战略、营销战略、知识产权战略、能力建设战略)

目录 一、创新支持战略概述 二、平台战略&#xff1a;大平台小产品战略 2.1 概述 1、平台战略的定义 2、平台战略的特点 3、平台战略的应用领域 4、平台战略的成功案例 5、平台战略的发展趋势 2.2 大平台小产品战略 1&#xff09;大平台的建设 2&#xff09;、小产品…

王牌功能 | 法大大“用户角色权限管理”,合同数据分流、管理权限分层都搞定!

合同签了还得管&#xff0c; 按业务、按项目、按岗位级别… 关于法大大“用户角色权限管理”功能的使用&#xff1a;企业操作人员在电子合同平台创建企业后&#xff0c;需添加企业组织架构&#xff0c;主要添加合同操作相关的人员&#xff0c;即可实现合同操作与数据权限的管理…

QT 对话框 仿文本编辑器

对话框通常是一个顶层窗口&#xff0c;出现在程序最上层&#xff0c;用于实现短期任务或者简洁的用户交互 一、消息对话框&#xff08;QMessageBox&#xff09; 1、QMessageBox类成员函数实现 1&#xff09;实例化 QMessageBox类 对象 2&#xff09;设置对象属性 3&#x…

用API接口可以实现哪些功能(天猫API接口|京东API接口)

在电商领域&#xff0c;API接口可以实现多种功能&#xff0c;起到连接内外部系统及优化电商业务流程等多种作用&#xff0c;从而来提高电商企业的运营效率。 具体来看&#xff0c;API接口可以用来&#xff1a; 商品管理&#xff1a; API接口能够用来获取商品详情等&#xff0…

顶级PCVR头显具备什么配置?清晰度如何?

头戴式显示器是VR体验中用户与虚拟现实环境交互不可或缺的一部分。高端的头显通常可为使用者提供具有超高分辨率的高清画面&#xff0c;因此当你拥有一部高端的VR头显&#xff0c;虚拟世界将如真实世界一样呈现在你眼前。 说到顶级头显我们就不得不提到Varjo&#xff0c;Varjo是…

DBeaver连接数据库报连接错误:Public Key Retrieval is not allowed

问题描述 使用DBeaver软件连接mysql数据库的时候&#xff0c;有如下提示信息&#xff1a; 解决办法 点击驱动属性->找到allowPublicKeyRetrieval这项&#xff0c;把值设置为TRUE,再点击连接测试 可以成功连接到mysql数据库&#xff0c;问题解决~

杰发科技Bootloader(3)—— 基于7801的APP切到Boot

为了方便在APP中跳转到Boot重新进行升级&#xff0c;有两种办法&#xff0c;7840同样可以使用。 1. 调用reset接口进行复位&#xff0c;复位后会先进Boot&#xff0c;再自动跳转到App。 NVIC_SystemReset(); 2. 直接使用跳转指令&#xff0c;参考Boot跳转到App代码&#xff0…