获得和设置终端属性使用函数tcgetattr
和tcsetattr
可以获得或设置termios
。这样也就可以检测和修改各种终端选择标志和特殊字符,以使终端按我们所希望的方式进行操作。
#include <termios.h>
int tcgetattr(int filedes, struct termios *termptr);
int tcsetattr(int filedes, int opt, const struct termios *termptr);
</termios.h>
两个函数返回:若成功则为0,若出错则为-1。
这两个函数都有一个指向termios
结构的指针作为其参数,它们返回当前终端的属性,或者设置该终端的属性。因为这两个函数只对终端设备进行操作,所以若filedes
并不引用一个终端设备则出错返回,errno
设置为ENOTTY
。
tcsetattr
的参数opt
使我们可以指定在什么时候新的终端属性才起作用。opt
可以指定为下列常数中的一个:
-
TCSANOW
更改立即发生。 -
TCSADRAIN
发送了所有输出后更改才发生。若更改输出参数则应使用此选择项。 -
TCSAFLUSH
发送了所有输出后更改才发生。更进一步,在更改发生时未读的所有输入数据都被删除(刷清)。
tcsetattr
函数的返回值易于产生混淆。如果它执行了任意一种所要求的动作,即使未能执行所有要求的动作,它也返回0(表示成功)。如果该函数返回0,则我们有责任检查该函数是否执行了所有要求的动作。这就意味着,在调用tcsetattr
设置所希望的属性后,需调用tcgetattr
,然后将实际终端属性与所希望的属性相比较,以检测两者是否有区别。
POSIX串口编程文档提供了详细的POSIX串口编程指南和实例,帮助理解如何使用这些函数。
8653终端使用说明详细介绍了终端设备的使用和配置,进一步丰富了对终端属性管理的认识。
使用tcgetattr函数与tcsetattr函数控制终端doc是一本专门针对这两个函数的文档,内容详实,便于深入学习。
VC使用API函数进行串口编程说明中提供了大量代码示例,便于实践操作。
暂无评论