📄 termios.h
字号:
#ifndef _TERMIOS_H#define _TERMIOS_H#define TTY_BUF_SIZE 1024 // tty 中的缓冲区长度。/* 0x54 is just a magic number to make these relatively uniqe ('T') *//* 0x54 只是一个魔数,目的是为了使这些常数唯一('T') */// tty 设备的ioctl 调用命令集。ioctl 将命令编码在低位字中。// 下面名称TC[*]的含义是tty 控制命令。// 取相应终端termios 结构中的信息(参见tcgetattr())。#define TCGETS 0x5401// 设置相应终端termios 结构中的信息(参见tcsetattr(),TCSANOW)。#define TCSETS 0x5402// 在设置终端termios 的信息之前,需要先等待输出队列中所有数据处理完(耗尽)。对于修改参数// 会影响输出的情况,就需要使用这种形式(参见tcsetattr(),TCSADRAIN 选项)。#define TCSETSW 0x5403// 在设置termios 的信息之前,需要先等待输出队列中所有数据处理完,并且刷新(清空)输入队列。// 再设置(参见tcsetattr(),TCSAFLUSH 选项)。#define TCSETSF 0x5404// 取相应终端termio 结构中的信息(参见tcgetattr())。#define TCGETA 0x5405// 设置相应终端termio 结构中的信息(参见tcsetattr(),TCSANOW 选项)。#define TCSETA 0x5406// 在设置终端termio 的信息之前,需要先等待输出队列中所有数据处理完(耗尽)。对于修改参数// 会影响输出的情况,就需要使用这种形式(参见tcsetattr(),TCSADRAIN 选项)。#define TCSETAW 0x5407// 在设置termio 的信息之前,需要先等待输出队列中所有数据处理完,并且刷新(清空)输入队列。// 再设置(参见tcsetattr(),TCSAFLUSH 选项)。#define TCSETAF 0x5408// 等待输出队列处理完毕(空),如果参数值是0,则发送一个break(参见tcsendbreak(),tcdrain())。#define TCSBRK 0x5409// 开始/停止控制。如果参数值是0,则挂起输出;如果是1,则重新开启挂起的输出;如果是2,则挂起// 输入;如果是3,则重新开启挂起的输入(参见tcflow())。#define TCXONC 0x540A//刷新已写输出但还没发送或已收但还没有读数据。如果参数是0,则刷新(清空)输入队列;如果是1,// 则刷新输出队列;如果是2,则刷新输入和输出队列(参见tcflush())。#define TCFLSH 0x540B// 下面名称TIOC[*]的含义是tty 输入输出控制命令。// 设置终端串行线路专用模式。#define TIOCEXCL 0x540C// 复位终端串行线路专用模式。#define TIOCNXCL 0x540D// 设置tty 为控制终端。(TIOCNOTTY - 禁止tty 为控制终端)。#define TIOCSCTTY 0x540E// 读取指定终端设备进程的组id(参见tcgetpgrp())。#define TIOCGPGRP 0x540F// 设置指定终端设备进程的组id(参见tcsetpgrp())。#define TIOCSPGRP 0x5410// 返回输出队列中还未送出的字符数。#define TIOCOUTQ 0x5411// 模拟终端输入。该命令以一个指向字符的指针作为参数,并假装该字符是在终端上键入的。用户必须// 在该控制终端上具有超级用户权限或具有读许可权限。#define TIOCSTI 0x5412// 读取终端设备窗口大小信息(参见winsize 结构)。#define TIOCGWINSZ 0x5413// 设置终端设备窗口大小信息(参见winsize 结构)。#define TIOCSWINSZ 0x5414// 返回modem 状态控制引线的当前状态比特位标志集(参见下面185-196 行)。#define TIOCMGET 0x5415// 设置单个modem 状态控制引线的状态(true 或false)(Individual control line Set)。#define TIOCMBIS 0x5416// 复位单个modem 状态控制引线的状态(Individual control line clear)。#define TIOCMBIC 0x5417// 设置modem 状态引线的状态。如果某一比特位置位,则modem 对应的状态引线将置为有效。#define TIOCMSET 0x5418// 读取软件载波检测标志(1 - 开启;0 - 关闭)。// 对于本地连接的终端或其它设备,软件载波标志是开启的,对于使用modem 线路的终端或设备则// 是关闭的。为了能使用这两个ioctl 调用,tty 线路应该是以O_NDELAY 方式打开的,这样open()// 就不会等待载波。#define TIOCGSOFTCAR 0x5419// 设置软件载波检测标志(1 - 开启;0 - 关闭)。#define TIOCSSOFTCAR 0x541A// 返回输入队列中还未取走字符的数目。#define TIOCINQ 0x541B// 窗口大小(Window size)属性结构。在窗口环境中可用于基于屏幕的应用程序。// ioctls 中的TIOCGWINSZ 和TIOCSWINSZ 可用来读取或设置这些信息。struct winsize{ unsigned short ws_row; // 窗口字符行数。 unsigned short ws_col; // 窗口字符列数。 unsigned short ws_xpixel; // 窗口宽度,象素值。 unsigned short ws_ypixel; // 窗口高度,象素值。};// AT&T 系统V 的termio 结构。#define NCC 8 // termio 结构中控制字符数组的长度。struct termio{ unsigned short c_iflag; /* input mode flags */// 输入模式标志。 unsigned short c_oflag; /* output mode flags */// 输出模式标志。 unsigned short c_cflag; /* control mode flags */// 控制模式标志。 unsigned short c_lflag; /* local mode flags */// 本地模式标志。 unsigned char c_line; /* line discipline */// 线路规程(速率)。 unsigned char c_cc[NCC]; /* control characters */// 控制字符数组。};// POSIX 的termios 结构。#define NCCS 17 // termios 结构中控制字符数组的长度。struct termios{ unsigned long c_iflag; /* input mode flags */// 输入模式标志。 unsigned long c_oflag; /* output mode flags */// 输出模式标志。 unsigned long c_cflag; /* control mode flags */// 控制模式标志。 unsigned long c_lflag; /* local mode flags */// 本地模式标志。 unsigned char c_line; /* line discipline */// 线路规程(速率)。 unsigned char c_cc[NCCS]; /* control characters */// 控制字符数组。};/* c_cc characters *//* c_cc 数组中的字符 */// 以下是c_cc 数组对应字符的索引值。#define VINTR 0 // c_cc[VINTR] = INTR (^C),\003,中断字符。#define VQUIT 1 // c_cc[VQUIT] = QUIT (^\),\034,退出字符。#define VERASE 2 // c_cc[VERASE] = ERASE (^H),\177,擦出字符。#define VKILL 3 // c_cc[VKILL] = KILL (^U),\025,终止字符。#define VEOF 4 // c_cc[VEOF] = EOF (^D),\004,文件结束字符。#define VTIME 5 // c_cc[VTIME] = TIME (\0),\0, 定时器值(参见后面说明)。#define VMIN 6 // c_cc[VMIN] = MIN (\1),\1, 定时器值。#define VSWTC 7 // c_cc[VSWTC] = SWTC (\0),\0, 交换字符。#define VSTART 8 // c_cc[VSTART] = START (^Q),\021,开始字符。#define VSTOP 9 // c_cc[VSTOP] = STOP (^S),\023,停止字符。#define VSUSP 10 // c_cc[VSUSP] = SUSP (^Z),\032,挂起字符。#define VEOL 11 // c_cc[VEOL] = EOL (\0),\0, 行结束字符。#define VREPRINT 12 // c_cc[VREPRINT] = REPRINT (^R),\022,重显示字符。#define VDISCARD 13 // c_cc[VDISCARD] = DISCARD (^O),\017,丢弃字符。#define VWERASE 14 // c_cc[VWERASE] = WERASE (^W),\027,单词擦除字符。#define VLNEXT 15 // c_cc[VLNEXT] = LNEXT (^V),\026,下一行字符。#define VEOL2 16 // c_cc[VEOL2] = EOL2 (\0),\0, 行结束2。/* c_iflag bits *//* c_iflag 比特位 */// termios 结构输入模式字段c_iflag 各种标志的符号常数。#define IGNBRK 0000001 // 输入时忽略BREAK 条件。#define BRKINT 0000002 // 在BREAK 时产生SIGINT 信号。#define IGNPAR 0000004 // 忽略奇偶校验出错的字符。#define PARMRK 0000010 // 标记奇偶校验错。#define INPCK 0000020 // 允许输入奇偶校验。#define ISTRIP 0000040 // 屏蔽字符第8 位。#define INLCR 0000100 // 输入时将换行符NL 映射成回车符CR。#define IGNCR 0000200 // 忽略回车符CR。#define ICRNL 0000400 // 在输入时将回车符CR 映射成换行符NL。#define IUCLC 0001000 // 在输入时将大写字符转换成小写字符。#define IXON 0002000 // 允许开始/停止(XON/XOFF)输出控制。#define IXANY 0004000 // 允许任何字符重启输出。#define IXOFF 0010000 // 允许开始/停止(XON/XOFF)输入控制。#define IMAXBEL 0020000 // 输入队列满时响铃。/* c_oflag bits *//* c_oflag 比特位 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -