一起talk C栗子吧(第一百七十一回:C语言实例--关闭终端中的回显功能二)
2016-07-03 23:37
351 查看
各位看官们,大家好,上一回中咱们说的关闭终端中回显功能的例子,这一回咱们继续说该例子是 。闲话休提,言归正转。让我们一起talk C栗子吧!
看官们, 我们在前一章回中介绍了如何关闭终端中的回显功能,当时是借助系统命令stty实现该功能的,这一回中我们将介绍另外一种关闭终端中回显功能的方法。该方法是通过终端的编程接口来操作终端的。
在Linux中比较常用的是POSIX标准中的termios接口。在介绍termios接口前,我们先介绍一下termios类型。
该类型是一个结构体类型,它的定义位于头文件
该类型的每个成员用来控制一个终端中的模式,比如成员c_iflag用来控制终端的输入模式,大家可以从每个成员后面的英文注释中明白成员的作用,这里就不一一介绍了。
我们今天主要讨论
该成员的值是一些宏变量,具体如下:
我们重点关注
该函数用来获取终端中的termios信息;
该函数的第一个参数是终端的文件描述符;
该函数的第二个参数是termios类型的指针变量,用来存放从终端中获取到的termios信息;
该函数运行成功时返回0,否则返回-1,并且设置全局变量errno;
该函数用来修改终端中的termios信息;
该函数的第一个参数是终端的文件描述符;
该函数的第二个参数是修改终端的方式,稍后做详细介绍;
该函数的第三个参数是termios类型的指针变量,函数会把终端中的termios信息修改成它指向的内容;
该函数运行成功时返回0,否则返回-1,并且设置全局变量errno;
接下来我们介绍该函数第二个参数的详细信息。
第二个参数的值,有以下三种,分别表示不同的修改方式:
各位看官,关于关闭终端中回显功能的例子”咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
看官们, 我们在前一章回中介绍了如何关闭终端中的回显功能,当时是借助系统命令stty实现该功能的,这一回中我们将介绍另外一种关闭终端中回显功能的方法。该方法是通过终端的编程接口来操作终端的。
在Linux中比较常用的是POSIX标准中的termios接口。在介绍termios接口前,我们先介绍一下termios类型。
该类型是一个结构体类型,它的定义位于头文件
/usr/include/i386-linux-gnu/bits/termios.h中, 详细的定义如下:
struct termios { tcflag_t c_iflag; /* input mode flags */ tcflag_t c_oflag; /* output mode flags */ tcflag_t c_cflag; /* control mode flags */ tcflag_t c_lflag; /* local mode flags */ cc_t c_line; /* line discipline */ cc_t c_cc[NCCS]; /* control characters */ speed_t c_ispeed; /* input speed */ speed_t c_ospeed; /* output speed */ };
该类型的每个成员用来控制一个终端中的模式,比如成员c_iflag用来控制终端的输入模式,大家可以从每个成员后面的英文注释中明白成员的作用,这里就不一一介绍了。
我们今天主要讨论
c_lflag成员,它主要用来控制本地终端的特性,它的类型是
tcflag_t,该类型本质上是无符号int类型,原因如下:
typedef unsigned int tcflag_t;
该成员的值是一些宏变量,具体如下:
/* c_lflag bits */ #define ISIG 0000001 #define ICANON 0000002 ... //省略一部分 #define ECHO 0000010 #define ECHOE 0000020 #define ECHOK 0000040 #define ECHONL 0000100 ... //省略一部分,这些宏定义也在termios.h头文件,可以自己去查看。
我们重点关注
ECHO这个宏,它的作用是打开本地终端的回显功能。这时有看官说,是不是修改这个值就能关闭终端的回显功能呢?没错,这位看官说的完全正确。可是我们如何修改本地终端中的这个值呢?答案是终端编程接口。接下来我们介绍两个常用的终端编程接口:
int tcgetattr(int fd, struct termios *termios_p);
该函数用来获取终端中的termios信息;
该函数的第一个参数是终端的文件描述符;
该函数的第二个参数是termios类型的指针变量,用来存放从终端中获取到的termios信息;
该函数运行成功时返回0,否则返回-1,并且设置全局变量errno;
int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);
该函数用来修改终端中的termios信息;
该函数的第一个参数是终端的文件描述符;
该函数的第二个参数是修改终端的方式,稍后做详细介绍;
该函数的第三个参数是termios类型的指针变量,函数会把终端中的termios信息修改成它指向的内容;
该函数运行成功时返回0,否则返回-1,并且设置全局变量errno;
接下来我们介绍该函数第二个参数的详细信息。
第二个参数的值,有以下三种,分别表示不同的修改方式:
/* tcsetattr uses these */ #define TCSANOW 0 //立即修改终端中的termios信息 #define TCSADRAIN 1 //等待当前的输入操作完成后再修改终端中的termios信息 #define TCSAFLUSH 2 //等待当前的输入操作完成后再修改终端中的termios信息,但是会丢弃还没有从read()函数返回的输入内容;
各位看官,关于关闭终端中回显功能的例子”咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
相关文章推荐
- C++之类和对象的使用(一)
- C语言文件的编译与执行的四个阶段
- c语言学习笔记45
- C语言中怎样判断汉字
- Visual C++开发工具与调试技巧整理
- Effective C++: lambda表达式与闭包.
- 简单的坦克大战模拟小游戏
- c++ 面试整理
- C的结构体和C++结构体
- C语言 求两个数的最大公约数
- C语言 将三个数按从大到小输出
- 农夫过河
- C语言 将一个整数的二进制序列分别输出
- C语言 实现两个数组内容交换
- opensslsha1算法源码c++版
- 基于C++的学生信息管理系统
- C语言间隔删除数组的探究
- C语言中* 和 &
- 【C++】MFC 创建对话框,实现对“学生课程成绩”的管理
- C++和.net的集合类对应