1. 鉴于上一章中提到的关于 磁盘连接和设备连接的相同和不同,对这种双重性的处理,程序分为软件工具和针对特定设备编写的程序。针对特定设备编写的程序 并非是要编写其驱动程序,而是根据应用的需要 调整驱动程序的属性。
2. 软件工具:不考虑 数据源来自哪里,对磁盘文件和设备文件不加区分。
3. 针对特定设备编写的程序:为特定应用控制设备。其中用户程序是一种常见的与设备相关的程序。经常需要满足以下需要:
1) 立即响应击键时间
2) 有限的输入集
3) 输入超时
4) 屏蔽^C
4. 终端驱动程序的模式:
1) 规范模式:在该模式下,驱动程序支持缓冲和编辑 功能,同时还会处理特殊按键信息(控制信息)。这是默认模式。
2) 非规范模式:在该模式下,驱动程序仅仅对特殊按键信息(控制信息)进行处理,使用#stty [-]icanon,来在规范模式和非规范模式之间进行转换。
3) raw模式:在该模式下,终端驱动程序不会对终端传入的数据进行处理,完全直通式的将信息从终端传递到程序中进行处理。
5. 编写一个用户程序:play_again.c
1) play_again0.c:基本的实现与用户交互
2) play_again1.c:即时响应,不用等用户回车便读入用户输入
3) play_again2.c:忽略非法按键,不再显示错误输入
4) play_again3.c:非阻塞处理和超时处理(非阻塞是任何一个打开的文件的属性,用fcntl或open设置;超时处理也有其他的实现方式),play_again3.c的一个明显错误(当用户输入ctrl+c时,程序退出且没有对终端的设置进行还原,这会影响后续程序的运行效果)
6. 按下ctrl+c之后的详细过程(驱动程序是一个独立的部分):
->用户按下ctrl+c组合键
->终端驱动程序将该组合键解释成中断信号,调用相关系统调用
->内核信号系统向进程发出SIGINT信号
->进程接收到信号,默认退出
7. 信号是什么:信号是由一个整数代表的特定的消息
信号可以来自三个方面:用户(组合按键)、内核(程序运行错误)、进程(进程调用kill)。由进程的某些操作产生的是同步信号,来自用户的是异步信号。
8. 进程如何处理信号(三种方法):默认处理(通常为进程终止)、忽略(收到信号不作处理)、绑定信号处理函数到信号(收到信号执行绑定的函数)
9. 为处理信号做准备:play_again4.c
在程序中,为SIGINT绑定信号处理函数,忽略SIGQUIT信号。
10. 通过对上述终端设备控制编程的了解总结出为控制设备编写程序的基本步骤:
1) 了解设备驱动程序的属性、如何读取和设置;
2) 为实现应用程序的特定要求调整驱动程序;
3) 学习如何处理信号
11. 小结
1) 某些程序需要处理来自特定设备的数据,这要求程序能控制与设备的链接。Unix中最常见的设备是终端。
2) 要了解终端驱动的模式,属性及其设置
3) 用户的键盘操作分为三类:实际的数据、编辑信息(支持缓冲下退格键等)、控制信息(组合键)
4) 信号是内核发给进程的消息,进程有三种方法来处理其受到的信号。
----------------------------------------------------------------------------------------
本文链接http://blog.csdn.net/yongchurui/article/details/26365711
2014.05.20