struct termios{
unsigned long c_iflag;
unsigned long c_oflag;
unsigned long c_cflag;
unsigned long c_lflag;
unsigned char c_line;
unsigned char c_cc[NCCS];
}
c_iflag : 输入模式标志集。终端设备驱动程序用这些标志来控制如何对终端输入的字符进行变换处理。
例如:
是否需要把输入的换行符NL转换成回车符CR
是否需要把输入的大写字符转换成小写字符(因以前有些终端只能输入大写字符)
相关的处理函数是 tty_io.c 文件中的 copy_to_cooked()
c_oflag : 输出模式标志集。终端设备驱动程序使用这些标志控制如何把字符输出到终端上。
主要在 tty_io.c 的 tty_write()函数中使用。
c_cflag : 控制模式标志集。主要用于定义串行终端传输特性,包括波特率、字符比特位数以及停止位数等。
c_lflag : 本地模式标志集。主要用于控制驱动程序与用户的交互。
例如:
是否需要回显(echo)字符
是否需要把驱除字符直接显示在屏幕上
是否需要让终端上键入的控制字符产生信号
这些操作主要在 copy_to_cooked()函数和tty_read()中使用。
例如:
若设置了 ICANON 标志,则表示终端处于规范式输入状态,否则终端处于非规范模式。
如果设置 ISIG 标志,则表示收到终端发出的控制字符 INTR、QUIT、SUSP时系统需要
产生相应的信号。
c_cc[] : 包含了终端所有可以修改的特殊字符。例如你可以通过修改其中的中断字符(^C)由其它按键产生。
其中 NCCS 是数组的长度值。
利用系统调用 ioctl 或 使用相关函数(tcsetattr()),我们可以通过修改 termios 结构中的信息来改变终端的设置参数。行规则函数即是根据这些参数设置进行操作。
阅读(5423) | 评论(0) | 转发(0) |