读书笔记-第五章 连接控制 学习stty

先放上思维导图

为设备编程&设备就像文件

前面所学的知识都是基于文件的,而在unix/linux系统中,所有的设备(打印机,终端,话筒,摄像头等等)也属于文件,它拥有文件名,支持系统调用,有类似于文件的属性(读、写、最近修改时间等)
举个?

  1. 文件名:通常的表示设备的文件存放在/dev中,如终端就在/dev/pts当中(对于centos系统在/dev/pts/1中,可能根据linux版本不同有区别,输入tty,显示的就是终端的文件),我们可以尝试命令who > /dev/pts/1 ,可以看到终端输出了登陆过系统的人及登陆时间,这说明终端设备的文件名就是这个/dev/pts中的1啦
  2. 支持系统调用:如read,我们从话筒中读取声音数据相当于读取文件中的数据,再如write,我们向/dev/pts/1写入数据相当于是往终端中写入,再打印在屏幕上
  3. 属性:从上图中的ls -i /dev/pts/1可以看出来文件拥有inode 4,权限位为rw–w--w-,1个链接,文件所有者root和组tty,最近修改时间是4月21日 08:14,文件类型是c,表示文件是以字符为单位来传送的,区别:
    - 设备文件是链接不是容器
    - inode存储的是指向内核子程序的指针(内核中 传输设备数据的子程序被称为设备驱动程序)
    - 还有个主设备号确定处理该设备实际的子程序
    - 还有个从设备号被作为参数传输到该子程序

设备与文件的不同之处


就讲了一个:如图,与磁盘文件的连接中间有个缓冲区,设备文件没有

磁盘连接的属性

先引入一个函数fcntl:

再插播一下文件描述符而且这个“文件描述符”是真的很抽象,它其实就是一个十进制数,转化为二进制数后,每个位代表它是否具有某些属性(有的话该位为1,否则为0)

属性1:缓冲

这个就是决定连接一个文件的时候要不要缓冲以下再传
如下是关闭文件的自动缓冲的操作:

步骤就是

  • 获得flag
  • 与我们要得到的那个值或一下
  • 通过fcntl来改变该文件属性

属性2:自动添加模式

这个就是说,在两个用户同时登陆要往wtmp文件中记录登入登出记录的时候会产生冲突(标准叫法:竞争 race
condition),然后有一个叫做自动添加模式(auto -append mode)的属性可以避免这种情况,至于原理它也没讲
启动自动添加模式:

用open控制文件描述符

“用open改变文件描述符”更容易理解一点
open函数同样具有改变文件描述符的作用,如图


这里还有一个两个用户同时创建文件时会产生竞争的问题,后文中还会讲到

磁盘连接小结

终端连接的属性

终端的IO不简单

名字起的好难以理解它要讲什么啊
终端和进程之间并不是直接连接在一起的,其实中间是有一个处理层的



所以得出结论:

stty命令

用来让用户读取和修改终端驱动程序的设置
stty可以显示终端驱动程序的一些简单设置
stty -all将所有设置都显示出来
stty erase X将删除符号改为‘X’
stty -echo 删除回显(就是输入的东西不会显示在屏幕上,类似输入密码时)

编写终端驱动程序

tty函数中的分类:

  1. 函数修改的过程:
    标志位拿出来 标志位变一下 标志位送进去:

    那两个我不会拼的函数的定义:
    简单来说:
  • 中间是get的那个用来拿出标志位
  • 中间是set的那个用来送进去标志位

麻烦的定义看下面


还有里面的when参数:

2. 位
termios是一个结构体,有很多标志集和1个控制数组

一下是几个标志集的含义,依旧是转化为二进制之后0代表没有,1代表有,关于它们都是什么意思我都看不懂?,我发现是百度百科是有的

编写终端驱动程序:栗子

  1. echostate.c 显示回显位的状态
    还记得前面的拿出来,改掉,放回去嘛?
    这里就是拿出来,输出就可以
  2. setecho.c 改变echo的状态
    这里继续是拿出来,改掉,放进去
  3. showtty.c 大量显示驱动程序属性
    这个是拿出来,输出去
    有没有注意到
涉及到修改的就是拿出来,改一下,放出去
只涉及到显示的就是拿出来,输出去

思想都是很简单的
只是这次里面的输出会复杂一些,又调用了其他函数来输出
这里就只展示主函数部分啦,showbaud和show_some_flag函数都是用来输出的

终端连接小结

终端拥有一个可以让进程读取字符的键盘,一个可让进程发送字符的显示器
进程和终端之间的进程传输和数据处理是由终端驱动程序负责的

其他设备编程:ioctl

文件 设备 和流

小结

  1. 主要内容:

    (怎么有种盖了章的既视感?)
    好啦主要内容就是这些
    再来回顾一遍思维导图:

stty详解-Unix/Linux编程实践教程第五章 学习stty相关推荐

  1. linux编程课后作业,Unix/Linux 编程实践教程第三章习题

    tips: 答案仅供参考,不保证正确* 3.1 在我的 deepin 上,d_name 的长度是 256,有的系统定义成 1 是为了节省空间,使用时可以通过 malloc() 动态的分配空间,比如: ...

  2. 《Unix/linux编程实践教程》------重定向程序的I/O

    <Unix/linux编程实践教程>书中举例命令more的用法: $more filename $command | more $more < filename 用法1直接显示fil ...

  3. Unix/Linux编程实践教程–书评

    花了两个月的时间把这本书读完了,完成了一部分的课后习题. 总的来说,这是一本挺好的Unix\Linux编程的入门书(虽然书中的小错误一大堆),书的开始部分简要介绍了Unix系统编程,讲述了如何使用男人 ...

  4. linux pipe函数 重定向,I/O重定向和管道——《Unix/Linux编程实践教程》读书笔记(第10章)...

    1.I/O重定向的概念与原因 及 标准输入.输出的标准错误的定义 所以的Unix I/O重定向都基于标准数据流的原理.三个数据了分别如下: 1)标准输入--需要处理的数据流 2)标准输出--结果数据流 ...

  5. 进程和程序:编写shell——《Unix/Linux编程实践教程》读书笔记(第8章)

    2019独角兽企业重金招聘Python工程师标准>>> 1.Unix shell的功能 shell是一个管理进程和运行程序的程序.所有常用的shell都有3个主要功能: (1)运行程 ...

  6. unix/linux编程实践,Unix/Linux编程实践教程–cp在OS X的实现

    环境:OS X10.12.4 书中的代码对于OS X是适用的.值得提一嘴的是,其实OS X的open是可以在文件不存在的时候自动创建的,man 2 open时,就可以看到这个说明. The oflag ...

  7. 红帽linux安装图文教程详解,红帽linux安装图文教程详解

    大家都知道目前在商业服务器操作系统端,linux操作系统占的比例非常大,除了linux操作系统外,还有另外的两个操作系统,一个是uinx,一个是windows操作系统,但是如果自己要想自己在网络安全系 ...

  8. UNIX-LINUX编程实践教程-第三章-实例代码注解-ls2

    一 问题 对ls1的功能进行扩展,以达到类似ll命令的功能. 二 分析 在ls1中,我们利用readdir()函数和dirent结构体来获得目标文件夹内的文件名(dirent->d_name). ...

  9. 学习Unix/Linux编程要学些什么

    最近利用空余时间看了一下<Unix/Linux编程实践教程>,原书名为:Understanding Unix/Linux Programming: A Guide to Theory an ...

最新文章

  1. python究竟要不要使用多线程
  2. 干货 | 斯坦福的人工智能4年路线!
  3. WSS页面定制系列(2)---定制单个列表的表单页面
  4. 深度残差网络和Highway网络
  5. Markdown编辑器模板
  6. 这所双非高校硕士生一作发Science!系学校上半年第13篇CNS!
  7. 修改计算机属性中的内存大小_Python 类属性的动态特点
  8. 动感灯箱制作流程培训_从事广告行业20年老师傅,揭秘广告牌类型和制作工艺流程 !...
  9. 高并发锁Lock的详细使用
  10. 5G 时代,将边缘计算进行到底!
  11. mysql清理死链接_对MySQL的死连接Sleep的进程的来源研究
  12. bzoj 1055: [HAOI2008]玩具取名(区间DP)
  13. 【Proteus仿真8086】定时器8253产生波形发生器
  14. [转载] python内置函数 compile()
  15. JAVA代码编译流程
  16. elipse手机设备显示Target unknown解决方法
  17. 超全的概率公式和线性代数公式
  18. 备份蓝光光盘玩具总动员3,且Eclipse
  19. 【ENVI】FLAASH大气校正工具中比例因子说明
  20. S3C2440裸机------异常与中断__按键中断程序示例

热门文章

  1. linux下音乐播放器wav和mp3
  2. 复习js部分(每日更新)
  3. 女神联盟2服务器停止注册,金山猎豹女神联盟1月30日关服停止运营公告
  4. 长坡厚雪,联想大数据之道启示了什么?
  5. Spring Cloud Netfix Hystrix(断路器)
  6. 基于fpga的256m的SDRAM控制器
  7. 数据同步:MySQL到Elasticsearch
  8. Urlparse模块
  9. Iray材质测试(一)
  10. 微信小程序入门(保姆级)