Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59581
  • 博文数量: 32
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 325
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-28 21:50
文章分类

全部博文(32)

文章存档

2011年(1)

2010年(6)

2009年(25)

我的朋友

分类: LINUX

2009-12-06 14:19:15

  • 有些程序处理从特定设备来的数据。这些与特定设备相关的程序(设备驱动程序)必须控制进程与设备的连接。Unix系统中最常见的设备就是终端

  • 终端驱动程序有很多设置。各个设置的特定值决定了终端驱动程序的模式。为用户编写的程序通常需要设置终端驱动程序为特定的模式。
    主要通过调用函数tcgetattr和tcsetattr对struct termios进行设置
    终端模式有三种:1。规范模式(缓冲和编辑)2。非规范模式 3。raw模式

  • 非阻塞输入与阻塞输入
    当调用getchar或read从文件描述符读取输入时,这些调用通常会等待输入,这叫做阻塞输入。阻塞不仅仅是终端连接的属性,而是任何一个打开文件的属性,程序可以使用fcntl或open为文件描述符启动非阻塞输入

  • 用户输入的超时
    利用非阻塞输入和sleep()可以实现用户输入的超时,Unix系统可以在终端驱动程序中设置数组c_cc[]中的元素VTIME将超时功能移至终端驱动程序,需系统调用select()

  • 键盘输入分为3类,终端驱动程序对这些输入作不同的处理。1、大多数键代表常规数据,他们从驱动程序传输到进程。2、有些键调用驱动程序中的编辑函数。如果按下删除键,驱动程序将前一个字符从它的行缓冲中删除,并将命令发送到终端屏幕,使之从显示器中删除字符。3、有些键调用处理控制函数(即中断函数)。Ctrl-C告诉驱动程序调用内核中某个函数,这个函数给进程发送一个信号。终端驱动程序支持若干处理控制函数,它们都通过发送信号到进程来实现控制

  • 信号是从内核发送给进程的一种简短信息,可通过signal(7)查看信号联机帮助,信号可能来自用户,其他进程或内核本身(这三种来源都必须经过内核)。进程可以告诉内核,在它收到信号时需要作出怎样的响应,有三种响应(默认,忽略,调用函数),可通过调用函数signal来指定相应类型。

  • 本章出现的重要函数调用和数据结构
    终端驱动程序属性相关:
      属性设置struct termios
      函数:tcgetattr、tcsetattr   //#include
    磁盘文件连接属性设置:
      函数:fcntl    //#include
    信号:#include
    signal(SIGINT,SIG_DFL)   //对SIGINT信号默认处理
    signal(SIGINT,SIG_IGN)
       //对SIGINT信号忽略处理
    signal(signum,functionname)//对signum信号调用函数处理

  • 本章课后习题涉及到的知识,好的代码处理
    1。在终端属性上设置超时的方法
    2。编写一个行编辑器,功能有如何删除一个字符,一行。
    3。在课本例题中有如何跳过对非法字符的处理,模式的存储与还原
    4。利用islower()检测是否是小写字符。
阅读(503) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~