终端IO--unix环境高级编程读书笔记

这篇博客详细介绍了Unix环境下终端IO的工作方式,包括规范和非规范输入处理,以及如何通过termios结构体操作终端属性。通过示例解释了如何使用tcgetattr和tcsetattr函数禁止中断字符和更改文件结束字符,并探讨了ctermid、isatty和ttyname等函数的用法。此外,还讨论了如何获取和设置终端窗口大小。
摘要由CSDN通过智能技术生成

     终端IO部分整体上读了两遍,感觉这一部分的内容又乱又碎,不太好理解。读完了之后,仍然感觉什么也没有学到。先做一个肤浅的记录,等到以后要用到的时候,再回来补充。

    1.终端IO的工作方式

     终端IO有两种不同的工作方式,规范方式输入处理和非规范方式输入处理:

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

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

     2.对终端设备进行操作

     关于终端IO的属性存放在一个  termios  的结构体中,这个结构体中的成员如下:

           tcflag_t c_iflag;      /* input modes */
           tcflag_t c_oflag;      /* output modes */
           tcflag_t c_cflag;      /* control modes */
           tcflag_t c_lflag;      /* local modes */
           cc_t     c_cc[NCCS];   /* special characters */

通过对这些数据成员的设置,可以来控制终端的属性。c_iflag  用来控制终端的输入属性,c_oflag  用来控制输出的属性,c_cflag  用来控制一些其他属性,c_lflag  用来控制驱动程序和用户之间的界面。c_cc  数组包含了所有可以更改的特殊字符,这在稍后会介绍到。
     对终端设备的操作函数基本如下:
       int tcgetattr(int fd, struct termios *termios_p);

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

       int tcsendbreak(int fd, int duration);

       int tcdrain(int fd);

       int tcflush(int fd, int queue_selector);

       int tcflow(int fd, int action);

       speed_t cfgetispeed(const struct termios *termios_p);

       speed_t cfgetospeed(const struct termios *termios_p);

       int cfsetispeed(struct termios *termios_p, speed_t speed)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值