C 语言<termio.h>标准库头文件终端 I/O 操作方法总结

本文首发行知SLAM·机器人及自动驾驶入行实战社群,点击链接进入该星球可以获取最新独家知识分享:包括计算机基础(ubuntu、vscode、git、vim、grep、bash等工具命令工程使用)、C++语言(CMakeLists、标准库等)、第三方开源库(ROS、PCL、Eigen、Ceres、G2O、OpenCV)及SLAM开源框架(ORB-SLAM3、LOAM等)、数学理论知识、机器人及自动驾驶行业定位(组合导航、IMU、UWB定位)原理、代码及所有PDF资料,以及免费答疑解惑和求职渠道招聘信息分享,并和广大星球小伙伴交流激发更多知识火花,促进大家进步,欢迎大家点击加入了解。

感谢大家的点赞分享,本专栏进入《C/C++领域内容榜》第四了,笔者将继续分享更多高质量C++、机器人SLAM方向的实战项目知识,欢迎大家订阅专栏或者加入上面知识星球社区交流讨论。
在这里插入图片描述

以下是关于 C++ 中 <termio.h> 头文件的详细介绍:

目录

  1. <termio.h> 头文件概述
  2. 属于哪个库
  3. 类型说明
  4. 命名及记忆方法
  5. 函数和类的使用场景
  6. 函数方法列举
  7. 函数详细用法及代码实例
  8. 机器人 SLAM 项目应用实例
  9. 总结

<termio.h> 头文件概述

  • 主要功能<termio.h> 是一个 C 语言的头文件,主要用于终端 I/O 操作,在 C++ 中也可以使用。它提供了一系列函数和结构体,允许程序控制终端的输入和输出模式,包括设置终端的波特率、字符大小、奇偶校验、停止位,以及进行终端的原始模式和规范模式的切换,还可以用于终端的非阻塞 I/O 操作等。这些功能对于实现终端设备(如串口设备、控制台等)的输入输出控制非常有用。

属于哪个库

  • 所属库<termio.h> 不是 C++ 标准库的一部分,它是类 Unix 系统(如 Linux、macOS 等)的系统头文件,用于与系统的终端设备进行交互。

类型说明

  • 类型<termio.h> 既不是模板类也不是模板函数,它是一个包含了各种函数和结构体的头文件。其中主要的结构体是 struct termios,包含了终端的各种参数,如输入输出速度、控制模式、本地模式等。

命名及记忆方法

  • 头文件名
    • termio 可以理解为 “terminal I/O” 的缩写,表明这个头文件是用于终端输入输出操作的。记住这是与终端设备的输入输出相关的头文件,有助于回忆其用途。
  • 函数名或结构体名
    • termios:这个结构体包含了终端的各种 I/O 参数,可将其理解为 “terminal I/O settings”,它存储了控制终端输入输出的各种设置。
    • tcgetattrtcsetattrtc 可能是 “terminal control” 的缩写,getattr 表示获取属性,setattr 表示设置属性,因此这两个函数分别用于获取和设置终端的属性。
    • cfsetispeedcfsetospeedcf 可能是 “control flags” 的缩写,setispeed 表示设置输入速度,setospeed 表示设置输出速度,它们用于设置终端的输入和输出波特率。

函数和类的使用场景

  • 使用场景
    • 当你需要对终端设备(如串口设备、控制台)进行底层的输入输出控制时,可以使用 <termio.h> 头文件。例如,在与串口设备通信时,需要设置波特率、数据位、停止位等参数;在开发命令行程序时,需要将终端切换到原始模式以实现特殊的输入处理(如读取单个字符而不等待回车键);在需要进行非阻塞 I/O 操作时,也会使用该头文件的相关函数。

函数方法列举

  • tcgetattr 函数
    • 用于获取终端的属性,将其存储在 struct termios 结构体中。
  • tcsetattr 函数
    • 用于设置终端的属性,根据 struct termios 结构体中的值修改终端的属性。
  • cfsetispeed 函数
    • 用于设置终端的输入波特率。
  • cfsetospeed 函数
    • 用于设置终端的输出波特率。
  • tcflush 函数
    • 用于刷新终端的输入或输出缓冲区。
  • tcdrain 函数
    • 等待所有输出被传输。

函数详细用法及代码实例

  • 使用 tcgetattrtcsetattr 函数
#include <iostream>
#include <cstdio>
#include <cerrno>
#include <cstring>
#include <termio.h>

int main() {
   
   
    struct termios tty;
    if (tcgetattr(STDIN_FILENO, &tty)!= 0) {
   
   
        std::cerr << "Error from tcgetattr: " << std::strerror(errno) << std::endl;
        return 1;
    }

    // 修改终端属性
    tty.c_lflag 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行知SLAM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值