mobile wallpaper 1
mobile wallpaper 2
mobile wallpaper 3
mobile wallpaper 4
522 字
1 分钟
termios的用法 [GPT]
2024-06-11
2024-06-18

在 Linux 中,termios 是一个结构体类型,用于控制终端 I/O 接口的设置。这个结构体以及相关的函数和宏定义在 <termios.h> 头文件中。termios 结构体定义了各种控制字符、输入和输出模式、控制模式和本地模式,这些设置可以用来配置终端设备的行为。

termios 结构体定义#

termios 结构体的定义因系统而异,但通常包含以下成员:

struct termios {
tcflag_t c_iflag; // 输入模式标志
tcflag_t c_oflag; // 输出模式标志
tcflag_t c_cflag; // 控制模式标志
tcflag_t c_lflag; // 本地模式标志
cc_t c_cc[NCCS]; // 控制字符数组
};

各成员的含义如下:

  • c_iflag(输入模式标志):用于控制输入数据的处理方式。
  • c_oflag(输出模式标志):用于控制输出数据的处理方式。
  • c_cflag(控制模式标志):用于控制硬件特性(如波特率、字符大小、停止位等)。
  • c_lflag(本地模式标志):用于控制终端功能(如回显、信号处理等)。
  • c_cc(控制字符数组):用于存储特殊控制字符(如 EOF、EOL、INTR 等)。

常用函数#

与 termios 相关的常用函数包括:

  1. tcgetattr:

    • 功能:获取终端的当前属性。

    • 原型:

int tcgetattr(int fd, struct termios *termios_p);

- 参数:
- `fd`:终端文件描述符。
- `termios_p`:指向 `termios` 结构体的指针,用于存储当前属性。
2. **`tcsetattr`**:
- 功能:设置终端的属性。
- 原型:
```cpp
int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);
  • 参数:

    • fd:终端文件描述符。
    • optional_actions:指定属性更改时的行为(如立即生效、在所有输出数据已传输后生效等)。
    • termios_p:指向 termios 结构体的指针,包含新的属性。
  1. cfsetispeed 和 cfsetospeed:

    • 功能:设置输入和输出波特率。

    • 原型:

int cfsetispeed(struct termios *termios_p, speed_t speed); int cfsetospeed(struct termios *termios_p, speed_t speed);

- 参数:
- `termios_p`:指向 `termios` 结构体的指针。
- `speed`:波特率值(如 `B9600`)。
4. **`tcflush`**:
- 功能:丢弃数据。
- 原型:
```cpp
int tcflush(int fd, int queue_selector);
  • 参数:

    • fd:终端文件描述符。

    • queue_selector:指定应丢弃的数据队列(如输入队列、输出队列等)。

      示例代码#

以下是一个使用 termios 结构体配置终端属性的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <termios.h>
int main() {
struct termios tty;
// 获取当前终端属性
if (tcgetattr(STDIN_FILENO, &tty) != 0) {
perror("tcgetattr");
return 1;
}
// 修改终端属性
tty.c_lflag &= ~(ICANON | ECHO); // 关闭回显和规范模式
tty.c_cc[VMIN] = 1; // 最小读取字符数
tty.c_cc[VTIME] = 0; // 超时
// 设置新的终端属性
if (tcsetattr(STDIN_FILENO, TCSANOW, &tty) != 0) {
perror("tcsetattr");
return 1;
}
// 从终端读取字符
char c;
while (read(STDIN_FILENO, &c, 1) > 0 && c != 'q') {
printf("Read: %c\n", c);
}
// 恢复原来的终端属性
tty.c_lflag |= (ICANON | ECHO);
if (tcsetattr(STDIN_FILENO, TCSANOW, &tty) != 0) {
perror("tcsetattr");
return 1;
}
return 0;
}

此示例程序通过 termios 结构体关闭了终端的规范模式和回显功能,读取单个字符并输出,直到读取到字符 'q'。然后恢复原来的终端属性。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

termios的用法 [GPT]
https://ericonline.cn/posts/termios的用法-gpt/
作者
Eric
发布于
2024-06-11
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录