【linux编程实践教程(Bruce Molay)】第五章 连接控制:学习tty

linux下的文件分为磁盘文件和设备文件

一 设备文件

  1. 设备也是一种文件,所有设备(打印机,鼠标,键盘,屏幕等)都被作为一个文件显示在文件系统树上----设备具有文件名,都存在/dev目录下
  2. 设备不仅具有文件名,还支持与文件相关的系统调用—>设备的打开,读取,写入,关闭等操作都可以通过系统调用open,read,write,close,stat,lseek来完成.
  3. 终端也是一种设备文件,通常认为其是键盘和显示屏,但是其不支持lseek函数操作。(tty命令可以查看当前终端名称)。
  4. 设备文件的属性(ls -l)大致与磁盘文件一样,只是在文件大小那一列有所不同
    * 设备文件不是一个容器,而是一个链接,设备文件的i节点结构中存储指向内核中子程序的指针。内核中传输设备文件数据的子程序被称为设备驱动程序(本质就是一个程序)

二 设备文件与磁盘文件的不同之处

  1. ls -l得出的文件属性中,设备文件在文件大小与文件所属组那一列比较特别
  2. 设备连接的属性与磁盘连接的属性不同
  3. 磁盘文件的属性只需要一个int型变量即可在这里插入图片描述
    ,而设备连接的属性则需要一个结构体(通过tcgetattr函数获得)来存储:在这里插入图片描述
    下面就磁盘连接的属性与终端连接的属性进行分析:

三 磁盘连接的属性

  1. 补充概念:一个 Linux 进程启动后,会在内核空间中创建一个 PCB 控制块,PCB 内部有一个文件描述符表(File descriptor table),记录着当前进程所有可用的文件描述符,也即当前进程所有打开的文件。----》文件描述符时存储在内核中的
  2. 当用open打开磁盘文件获得一个文件描述符fd时,文件描述符对应一个控制变量,修改控制变量会修改文件描述符的属性,进而修改文件的属性。
  3. 实际操作时,就是将控制变量从内核中取出到进程(程序)中,进行修改,修改完再送回内存,fd根据控制变量的修改,来修改文件的属性
  4. 与之密切相关的操作函数为fcntl与open函数
  5. link性质在单人操纵文件方面的应用(可替代open函数的O_APPEND,O_EXCEL)—确保操作的原子性

四 终端连接的属性

  1. 终端连接的属性,通常由终端驱动程序来设置----》而stty命令可通过修改终端驱动程序来查看和修改终端连接的属性。
  2. 编写终端驱动程序,可以修改终端连接的属性
    1. termios结构体的理解
    2. tcgetattr函数与tcsetattr函数
    3. 编写步骤(类似磁盘连接):1-通过tcgetattr函数将终端连接的属性信息存放在一个新的termios结构体中----》2-在程序中修改完毕后,再利用tcsetattr函数将该新的termios结构体传进去。

五 其它设备连接的属性

在这里插入图片描述

总结

  1. 磁盘文件的属性由fcntl函数获得
  2. 终端连接的属性由tcgetattr函数获得
  3. 其他设备文件连接的属性由ioctl函数获得
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值