终端驱动程序的模式:
先通过简短的转换程序来深入理解设备驱动程序的细节:
1 /* rotate.c 2 * purpose:useful for showing tty modes 3 * map a->b , b->c , ... , y->z ; 4 */ 5 6 #include <stdio.h> 7 #include <stdlib.h> 8 #include <ctype.h> 9 10 int main() 11 { 12 int c ; 13 while( ( c = getchar()) != EOF ) 14 { 15 if(c == ‘z‘) 16 { 17 c = ‘a‘; 18 } 19 else if( islower(c)) 20 { 21 c++ ; 22 } 23 putchar(c) ; 24 } 25 return 0 ; 26 }
使用tr命令能够达到同样的效果,但是tr的GNU版本具有输入缓冲,以上是一个不带缓冲的具体例子。这个程序中,rotate程序是和终端驱动器交换数据的,而终端驱动器从键盘输入数据并且从屏幕输出数据。
规范模式:缓冲和编辑
使用默认设置运行这个程序,我们发现,缓冲、编辑、回显和控制键的处理都由终端驱动程序完成了。缓冲和编辑包含规范处理,当这些特征被启动,终端连接被成为处于规范模式。
非规范处理:
如果使用“stty -icanon”关闭了终端驱动程序的规范模式处理,则上述程序的处理方式被改变了。
特别地,非规范模式没有缓冲,输入一个字符就会立即被送到程序rotate处理并且立即回显。
终端模式小结:
Understanding Unix/Linux Programming-终端控制和信号
原文:http://www.cnblogs.com/NJdonghao/p/5286300.html