基本的终端接口
接口特性
当一个终端文件被打开,通常它将引起进程等待直到连接被建立
进程组
一个终端可以具有与它相关的前台进程组,它发挥特定的角色
可设置的参数
termios 机构
该结构在<termios.h>中定义,在控制特定的终端 I/O 特性中要用到
输入模式
termios c_iflap 值域
标记名 | 描述 |
BRKINT | 信号中断 |
ICRNL | 输入时将CR映射到NL |
IGNBRK | 忽略中断状态 |
IGNCR | 忽略CR |
IGNPAR | 忽略奇偶错误 |
INLCR | 输入时将NL映射到CR |
INPCK | 输入奇偶校验使能 |
ISTRIP | Strip字符 |
IXOFF | 开始/停止输入控制使能 |
IXON | 开始/停止输出控制使能 |
PARMRK | 产生奇偶错误 |
控制模式
标记名 | 描述 |
CLOCAL | 忽略modem状态行 |
CREAD | 接收使能 |
CSIZE | 每个字节的位数 |
CS5 | 5位 |
CS6 | 6位 |
CS7 | 7位 |
CS8 | 8位 |
CSTOPB | 发送一个或 俩个停止位 |
HUPCL | 在最后的关闭中挂起 |
PARENB | 奇校验使劲 |
PARODD | 奇校验或 偶校验 |
本地模式
termios c_lflag 值
标识名 | 描述 |
ECHO | 响应使能 |
ECHOE | 响应ETASE |
ECHOK | 响应KILL |
ECHONL | 响应‘\n’ |
ICANON | 规范输入 |
IEXTEN | 扩展函数使能 |
ISIG | 信号使能 |
NOFLSH | 中断,停止或挂起后关闭flush |
TOSTOP | 为后台输出发送SIGTTOU |
特殊的控制字符
这些特殊的控制字符值在队列 c_cc 中定义,分为规范和非规范两种模式
波特率函数
#include <termios.h>
//这些接口被用来在 termios 结构获得和设定输入与输出的波特率值
speed_t cfgetospeed(const struct termios *termios_p);
int cfsetospeed(struct termios *termios_p, speed_t speed);
speed_t cfgetispeed(const struct termios *termios_p);
int cfsetispeed(struct termios *termios_p, speed_t speed);
基本的终端接口控制函数
获得并设定状态
#include <termios.h>
//tcgetattr: 获得 fildes 所确定的文件的参数并将其存储在 termios_p 所指向的结构中
//tcsetattr:将设置参数
int tcgetattr(int fildes, struct termios *termios_p);
int tcsetattr(int fildes, int optional_actions, const struct termios *termios_p);
行控制函数
#include <termios.h>
//终端使用异步连续数据传输
//tcsendbreak: 引起在一段时间内连续的‘0’位传输
//tcdrain:等待直到输出传输完毕
//tcflush和 tcflow :溢出的相关处理
int tcsendbreak(int fildes, int duration);
int tcdrain(int fildes);
int tcflush(int fildes, int queue_selector);
int tcflow(int fildes, int action);
取得前台进程组的 ID
#include <sys/types.h>
pid_t tgetpgrp(int fildes);
设置前台进程组 ID
#include <sys/types.h>
//进程支持控制终端,该函数设置与终端相关的前台进程组 ID 到 pgrp_id
int tcsetpgrp(int fildes, pid_t pgrp_id);