《APUE》读书笔记-第十八章终端I/O

  终端I/O应用很广泛,用于终端、计算机之间的直接连线、调制解调器以及打印机等等。终端I/O有两种不同的工作模式:

  (1)规范模式输入处理:终端输入以行为单位进行处理,对于每个读要求,终端驱动程序最多返回一行。(默认模式)

  (2)非规范模式输入处理:输入字符并不组成行。

  终端设备是由一般位于内核的终端驱动程序控制的,每个终端设备有一个输入队列和一个输出队列。如下图:


可以检测和更改的终端设备特性都包含在termios结构中。该结构定义在<termios.h>
struct termios{
tcflag_t   c_iflag;    输入标志
tcflag_t   c_oflag;     输出标志
tcflag_t   c_cflag;       控制标志
tcflag_t   c_lflag;       本地标志
cc_t     c_cc[NCCS];    控制字符
}
终端I/O函数

获取和设置终端属性函数:

int tcgetattr(int fd, struct termios *termios_p);
int tcsetattr(int fd, int optional_actions,const struct termios *termios_p);

终端标识:在大多数UNIXi系统中,控制终端的名字是/dev/tty。

char *ctermid(char *s);  //获取终端控制名字

int isatty(int fd); //判断fd是否为终端设备

char *ttyname(int fd);  // 获取终端设备的路径名

终端的窗口大小:内核为每个终端和伪终端保存了一个窗口大小结构winszie,用ioctl函数的TIOCGWINSZ命令可以获取此结构的当前值。

struct winsize {

  unsigned short ws_row;

  unsigned short ws_col;

  unsigned short ws_xpixel; /* unused */

  unsigned short ws_ypixel; /* unused */

};

总结:本章介绍了终端,涉及到很多系统底层的知识,很多参数。看的时候只是了解了一些基本的终端操作,还要很多地方不懂,关键是不知道终端用在什么地方,以后用到了需要回头好好学习一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值