zoukankan      html  css  js  c++  java
  • APUE读书笔记-第18章-终端I/O

    18.1 引言

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


    18.2 综述

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

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

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


    18.3 特殊输入字符

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

    *NL 新行字符,它也被称为行界定符。不能更改此字符。以规范模式(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库



  • 相关阅读:
    java用write()拷贝一个文本文件
    java代码简单练习
    java代码GUI简单的。。。
    java"=="与equals()方法的对照
    java代码Math.sqrt
    java代码for循环+缓冲流类
    java代码JFrame练习
    java 代码。= -=
    java流类
    java代码throws异常
  • 原文地址:https://www.cnblogs.com/james1207/p/3271475.html
Copyright © 2011-2022 走看看