摘要: 大多数UNIX系统都提供了一种功能,可以对当前终端窗口的大小进行跟踪,在窗口大小发生变化时,使内核通知前台进程组。内核为每个终端和伪终端保存一个winsize结构:Struct winsize {unsigned shortws_row;/* rows, in character */unsigned short ws_col;/* columns,... 阅读全文
posted @ 2014-03-02 22:34 ITtecman 阅读(1741) 评论(0) 推荐(0) 编辑
摘要: 关闭termios结构中c_lflag字段的ICANON标志就使终端处于非规范模式。在非规范模式中,输入数据并不组成行,不处理下列特殊字符:ERASE/KILL/EOF/NL/EOL/EOL2/CR/REPRINT/STATUS/WERASE.如前所述,规范模式很容易:系统每次返回一行。但在非规范模式下,系统怎样才能知道在什么时候将数据返回给我们呢?解决方法:当已读了指定量的数据后,或者已经过了给... 阅读全文
posted @ 2014-03-02 22:00 ITtecman 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 规范模式很简单:发一个读请求,输入完一行后,终端驱动程序即刻返回。下列几个条件都会造成读返回:所要求的字节数已经读到时,读返回。无需读一个完整的行。如果都了部分行,也不会丢失任何信息,下一次读从前一次读的停止处开始。当读到一个行定界符时,读返回。在规范模式中以下5个字符被解释为"行结束":NL、EOL、EOL2、EOF、设置了ICRNL但未设置IGNCR时的CR字符。在这5个行定界符中,其中只有一... 阅读全文
posted @ 2014-03-02 21:29 ITtecman 阅读(576) 评论(0) 推荐(0) 编辑
摘要: 前言在Linux系统中,一切设备都看作文件。而每打开一个文件,就有一个代表该打开文件的文件描述符。程序启动时默认打开三个I/O设备文件:标准输入文件stdin,标准输出文件stdout,标准错误输出文件stderr,分别得到文件描述符 0, 1, 2。实例现在来看一个测试ttyname函数的实例(ttyname函数功能是返回在该文件描述符上打开的终端设备的路径名):#include "apue.h"intmain(void){char *name;if(isatty(0)){name = ttyname(0);if(name == NULL)name = "und 阅读全文
posted @ 2014-03-02 20:15 ITtecman 阅读(14696) 评论(0) 推荐(0) 编辑
摘要: 历史沿袭至今,在大多数UNIX系统中,控制终端的名字是/dev/tty. POSIX.1提供了一个运行时函数,可被用来确定控制终端的名字。#include char *ctermid(char *ptr);返回值:若成功则返回指向控制终端名的指针,若出错则返回指向空字符串的指针如果ptr非空,则它被认为是一个指针,指向长度至少为L_ctermid字节的数组,进程的控制终端名存放在该数组中。常量L_... 阅读全文
posted @ 2014-03-02 17:28 ITtecman 阅读(1145) 评论(0) 推荐(0) 编辑
摘要: 下列4个函数提供了终端设备的行控制能力。其中,filedes引用一个终端设备,否则出错返回,errno设置为ENOTTY。#include int tcdrain(int filedes);int tcflow(int filedes, int action);int tcflush(int filedes, int queue);int tcsendbreak(int filedes, int ... 阅读全文
posted @ 2014-03-02 14:43 ITtecman 阅读(2133) 评论(0) 推荐(0) 编辑
摘要: 波特率(baud rate)是一个以往采用的术语,现在它指的是"位/秒"(bits per second)。虽然大多数终端设备对输入和输出使用同一波特率,但是只要硬件许可,可以将它们设置为两个不同值。#include speed_t cfgetispeed(const struct termios *termptr);speed_t cfgetospeed(const struct termio... 阅读全文
posted @ 2014-03-02 14:25 ITtecman 阅读(1159) 评论(0) 推荐(0) 编辑
摘要: 所有的终端选项标志,在程序中都可用tcgetattr和tcsetattr函数(http://www.cnblogs.com/nufangrensheng/p/3576682.html)进行检查和更改。在命令行(或shell脚本)中则可用stty(1)命令进行检查和更改。stty(1)命令是http://www.cnblogs.com/nufangrensheng/p/3575752.html中的表... 阅读全文
posted @ 2014-03-02 14:06 ITtecman 阅读(886) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/nufangrensheng/p/3575752.html 中的表18-1至表18-4中列出的所有选项标志(除屏蔽标志外)都用一位或几位(设置或清除)表示,而屏蔽标志则定义多位,它们组合在一起,于是可以定义多个值。屏蔽位有一个定义名,每个值也有一个名字。例如,为了设置字符长度,首先用字符长度屏蔽标志CSIZE将表示字符长度的位清0,然后设置下列值之... 阅读全文
posted @ 2014-03-02 13:51 ITtecman 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 使用函数tcgetattr和tcsetattr可以获得或设置termios结构。这样也可以检测和修改各种终端选择标志和特殊字符,以使终端按我们所希望的方式进程操作。#include int tcgetattr(int filedes, struct termios *termptr);int tcsetattr(int filedes, int opt, const struct termios ... 阅读全文
posted @ 2014-03-02 12:52 ITtecman 阅读(717) 评论(0) 推荐(0) 编辑
摘要: POSIX.1定义了11个在输入时作特殊处理的字符。实现定义了另外一些特殊字符。表18-6摘要列出了这些特殊字符。表18-6 终端特殊输入字符 在POSIX.1的11个特殊字符中,可将其中9个更改为几乎任何值。不能更改的两个特殊字符是换行符和回车符(\n和\r),有些实现也不允许更改STOP和START字符。为了进行修改,只要更改termios结构中c_cc数组的相应项。该数组中的元素都用名字作为下标进行引用,每个名字都以字母V开头。POSIX.1允许禁用这些字符。若将c_cc数组中的某项设置为_POSIX_VDISABLE的值,则禁用相应的特殊字符。实例 在详细说明各特殊字符之前,先看一个更 阅读全文
posted @ 2014-03-02 11:08 ITtecman 阅读(1796) 评论(0) 推荐(0) 编辑