18.1 引言

*终端I/O的用途很广泛,包括用于终端、计算机之间的直接连线、调制解调器以及打印机等等,所以终端I/O系统非常复杂

18.2 综述

*终端I/O有两种不同的工作模式:

(1)规范模式输入处理(Canonical mode input processing)

(2)非规范模式输入处理(Noncanonical mode input processing)

18.3 特殊输入字符

*CR \r 回车符。不能更改此字符。以规范模式进行输入时识别此字符。当设置了ICANON(规范模式)和ICRNL(将CR映射为NL)以及没有设置IGNCR(忽略CR)时,将CR转换成NL,并产生与NL符相同的作用。此字符返回给读进程(多半是转换成NL后)

*NL \n 新行字符,它也被称为行界定符。不能更改此字符。以规范模式(ICANON)输入时识别此字符。此字符返回给读进程

18.4 获得和设置终端属性

*使用函数tcgetattr和tcsetattr可以获得或设置termios结构。这样就可以检测和修改各种终端选择标志和特殊字符,以使终端按我们希望的方式进行操作

18.5 终端选项标志

*所以选项标志(除屏蔽标志外)都用一位或几位(设置或清除)表示,而屏蔽标志则定义多位,它们组合在一起,于是可以定义多个值。屏蔽标志有一个定义名,每个值也有一个名字

18.6 stty命令

*在命令行(或shell脚本)中可以用stty命令进行检查和更改选项

18.7 波特率函数

*波特率(baud rate)现在指的是“位/秒(bits per second)”。虽然大多数终端设备对输入和输出使用同一波特率,但是只要硬件许可,可以将它们设置为两个不同值

18.8 行控制函数

*tcdrain函数等待所有输出都被发送

*tcflow用于对输入和输出流控制进行控制

*tcflush函数刷清(抛弃)输入缓冲区或输出缓冲区

*tcsendbreak函数在一个指定的时间区间内发送连续的0位流

18.9 终端标识

*历史沿袭至今,在大多数UNIX系统中,控制终端的名字是/dev/tty。POSIX.1提供了一个运行时函数,可被用来确定控制终端的名字

char *ctermid(char *ptr);

18.10 规范模式

*规范模式很简单:发一个读请求,输入完一行后,终端驱动程序即返回。下面几个条件都会造成读返回。

(1)所要求的字节数已读到时,读返回

(2)当读到一个行界定符时,读返回

(3)如果捕捉到信号而且该函数并不自动重启动,则读也返回

18.11 非规范模式

*规范模式很容易:每次返回一行。但在非规范模式下,系统怎样才能知道在什么时候将数据返回给我们呢?如果它一次返回一个字节,那么系统开销就很大(如果每次返回的数据加倍,系统调用的开销就可以减半)。在启动读数据之前,往往不知道要读多少数据,所以系统不能总是一次返回多个字节

*解决方法是:当已读了指定量的数据后,或者已经过了给定的时间后,即通知系统返回。这种技术使用了termios结构中c_cc数组的两个变量:MIN和TIME。c_cc数组中的这两个元素的下标名为VMIN和VTIME

18.12 终端窗口的大小

*大多数UNIX系统都提供了一种功能,可以对当前终端窗口的大小进行跟踪,在窗口大小发生变化时,使内核通知前台进程组。内核为每个终端和伪终端保存一个winsize结构

18.13 termcap, terminfo和curses

*termcap的意思是终端能力(terminal capability),它指的是文本文件/etc/termcap和一套读此文件的例程

*termcap这种技术不是很完善。当越来越多类型的终端被加到该数据文件中时,为了找到一个特定的终端就须使用较长的事件扫描此文件。此数据文件也只用两个字符的名字来标识不同的终端属性。这种缺陷导致开发另一种新技术——terminfo及与其相关的curses库

APUE读书笔记-第18章-终端I/O的更多相关文章

  1. APUE读书笔记-第13章-守护进程

    第13章 守护进程 13.1 引言 *守护进程也称精灵进程(daemon)是生存期较长的一种进程.它们常常在系统自举时启动,仅在系统关闭时才终止.因为它们没有控制终端,所以说它们是在后台运行的.UNI ...

  2. APUE读书笔记-第14章-高级I/O

    14.1 引言 *高级I/O包括非阻塞I/O.记录锁.系统V流机制.I/O多路转换(select和poll函数).readv和writev函数以及存储映射I/O(mmap) 14.2 非阻塞I/O * ...

  3. APUE读书笔记-第15章-进程间通信

    15.1 引言 *进程之间交换信息的方法可以经由fork或exec传送打开文件,或者通过文件系统 *进程之间相互通信的其他技术——IPC(InterProcess Communication)包括半双 ...

  4. 《python核心编程》读书笔记--第18章 多线程编程

    18.1引言 在多线程(multithreaded,MT)出现之前,电脑程序的运行由一个执行序列组成.多线程对某些任务来说是最理想的.这些任务有以下特点:它们本质上就是异步的,需要多个并发事务,各个事 ...

  5. APUE读书笔记-第17章-高级进程间通信

    17.1 引言 *两种高级IPC:基于STREAMS的管道(STREAMS-based pipe)以及UNIX域套接字(UNIX domain socket)可以在进程间传送打开文件描述符.服务进程可 ...

  6. 《TCP/IP具体解释》读书笔记(18章)-TCP连接的建立与中止

    TCP是一个面向连接的协议.不管哪一方向还有一方发送数据之前.都必须在两方之间建立一条连接.这样的两端间连接的建立与无连接协议UDP不同.UDP向还有一端发送数据报时,无需不论什么预告的握手. 1.建 ...

  7. INSPIRED启示录 读书笔记 - 第18章 重新定义产品说明文档

    理想的产品说明文档 1.产品说明文档应该完整地描述用户体验——不只是用户需求,还包括交互设计和视觉设计.用户需求和用户体验是密不可分的 2.产品说明文档必须准确地描述软件的行为 3.产品说明文档必须以 ...

  8. 《Linux内核设计与实现》第五周读书笔记——第十一章

    <Linux内核设计与实现>第五周读书笔记——第十一章 20135301张忻 估算学习时间:共2.5小时 读书:2.0 代码:0 作业:0 博客:0.5 实际学习时间:共3.0小时 读书: ...

  9. 4 Visual Effects 视觉效果 读书笔记 第四章

    4   Visual Effects    视觉效果        读书笔记 第四章 Well, circles and ovals are good, but how about drawing r ...

随机推荐

  1. yo bootstrap mui 使用对比

    昨天晚上 又被问及职业发展方向,提及我的老本行css,切了几年的页面,近两年投入进css的时间屈指可数,被问及之前公司用的yo框架 对比业界内其他css 框架的优势. 1. yo模块化,碎片化  可自 ...

  2. Android 解决调用系统相册打不开图片 DecodeServices报解码错误

    这是由于系统相册不知道你图片目录是一个相册.打开前需要向系统相册“注册一下”,说白了就是让系统相册知道你这个图片所在的文件夹是个相册. private static void scanImageFil ...

  3. Win8.1 与 pl2303驱动

    在8.1上最新的pl2303驱动都不支持Win8.1了.要使用老的驱动 http://www.drv5.cn/sfinfo/9385.html 这里这个驱动里面有五个文件,通过在设备管理器里面查看串口 ...

  4. 微信分组群发图文40152,微信分组群发图文invalid group id hint

    微信分组群发40152,微信分组群发invalid group id hint >>>>>>>>>>>>>>> ...

  5. wsdl自动生成Java代码,根据wsdl生成Java代码

    wsdl自动生成Java代码,根据wsdl生成Java代码 >>>>>>>>>>>>>>>>>&g ...

  6. css修改li前面的小圆点的颜色

    直接改 li 的style 的 color 就好:就是这样:over

  7. SQL语句操作文件

    -----先开启命令exec sp_configure 'show advanced options', 1; reconfigure; exec sp_configure 'xp_cmdshell' ...

  8. javascript - 图片的幻灯片效果

    javascript 代码: <script type="text/javascript"> function select_play() { var select_p ...

  9. javascript-设置div隐藏

    html code: <div class="title"> <ul id="col02_left_title"> <li> ...

  10. orm fluentdata使用相关文章

    微型orm fluentdata使用:http://www.360doc.com/content/12/1228/23/9200790_256885743.shtml