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

全部博文(32)

文章存档

2011年(1)

2010年(6)

2009年(25)

我的朋友

分类: LINUX

2009-11-29 19:40:13

  • 内核在进程和外部世界间交换数据。外部世界包括磁盘文件,终端和外部设备(像打印机,声卡,鼠标等)。到磁盘文件和终端的连接有相似之处但也有差异

  • 磁盘文件和设备文件都有名字,属性和权限位。标准文件系统调用open,read,write,close和lseek,stat可被用于访问任何文件或设备。文件权限位以同样的方式应用于控制设备文件和磁盘文件的访问

  • 到磁盘文件的连接在处理和传输数据方面不同于到设备文件的连接。
    磁盘文件的连接属性有内核缓冲,自动添加模式(即创建,修改文件时的原子性)等,这些可以利用open和fcntl系统调用设置
    内核中管理与设备连接的代码被成为设备驱动程序。通过使用fcntlioctl,进程可以读取和改变设备驱动程序的设置
    fcntl通常适用于磁盘文件和终端文件
    ioctl适用于所有的设备文件
    终端驱动程序设置的属性的数据结构类型struct termios
    位操作:
    测试位       if(flagset & MASK)
    置位         flagset |= MASK
    清除位       flagset &= ~MASK

  • 终端小结
    终端拥有一个可以让进程读取字符的键盘和可让进程发送字符的显示器,终端是一个设备
    进程和终端间的数据传输和数据处理由终端驱动程序负责,终端驱动程序是内核的一部分,该内核代码提供缓冲,编辑,数据转换。
    到终端的连接是如此的重要,以至函数tcgetattr和tcsetattr专门用来提供对终端驱动的控制
    tcgetattr函数是对终端驱动程序的属性的获取
    tcsetattr函数是对终端驱动程序的属性的设置

  • Unix命令stty使得用户能够访问tcgetattr和tcsetattr函数
    stty是用来让用户检测,修改控制终端连接属性的设置

  • write命令可以用来和其他终端的用户通信

  • 竞争与原子操作概念
    本章中简要说明了在对文件进行操作时的原子操作,对文件描述夫设置自动添加模式可以启动原子操作,但例题5.24中使用link作信号量来使进程间互斥是中更好的方法

  • 本章出现的系统调用
    (1)fcntl()            //控制磁盘文件描述符的属性集
    #include
    #include
    #include
    (2)ioctl()            //控制任何一个设备的属性集
    #include
    (3)tcgetattr()        //获取终端驱动程序的属性
       tcsetattr()        //设置终端驱动程序
    #include
    数据结构
    struct termio        //终端驱动程序属性
    struct wimsize       //终端屏幕属性#include
阅读(452) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~