波特率和行控制函数
程序员文章站
2022-07-01 09:14:37
...
虽然大多数终端设备对输入和输出都使用同一波特率(即“位/秒”),但只要硬件允许,就可以使用下面 4 个函数将它们设置为不同的值。
其中,两个 cfget 函数的返回值,以及两个 cfset 函数的 speed 参数都是下列常量之一:B50、B75、B110、B134、B150、B200、B300、B600、B1200、B1800、B2400、B4800、B9600、B19200 或 B38400(多数系统还定义了另外的波特率值)。常量 B0 表示“挂断”。在调用 tcsetattr 时,如若将输出波特率指定为 B0,则调制解调器的控制线就不再起作用。
另外,使用这些函数时,必须认识到输入、输出波特率是存储在设备的 termios 结构中的。在调用任意一个 cfget 函数之前,要先用 tcgetattr 函数获得设备的 termios 结构。同理,在调用任意一个 cfset 函数后,还应当调用 tcsetattr 函数来使这种更改影响到设备。不过即使所设置的两个波特率中的任意一个出错,在调用 tcsetattr 之前可能也不会发现该错误。
下列 4 个函数提供了终端设备的行控制能力。它们都要求参数 fd 引用一个终端设备,否则出错返回 -1,并将 errno 设置为 ENOTTY。
tcdrain 函数等待所有输出都被传递。
tcflow 函数用于对输入和输出流控制进行控制。action 参数是下列 4 个值之一。
* TCOOFF:输出被挂起。
* TCOON:重新启动以前被挂起的输出。
* TCIOFF:系统发送一个 STOP 字符,这将使终端设备停止发送数据。
* TCION:系统发送一个 START 字符,使终端设备恢复发送数据。
tcflush 函数冲洗(抛弃)输入缓冲区(其中的数据是终端驱动程序已接收到,但用户程序尚未读取的)或输出缓冲区(其中的数据是用户程序已经写入,但尚未被传递的)。queue 参数是下列 3 个常量之一。
* TCIFLUSH:冲洗输入队列。
* TCOFLUSH:冲洗输出队列。
* TCIOFLUSH:冲洗输入和输出队列。
tcsendbreak 函数在一个指定的时间区间内发送连续的 0 值位流。若 duration 参数为 0,则此种传递延续 0.25~0.5 秒。POSIX.1 说明若 duration 非 0,则传递时间依赖于实现。
#include <termios.h> speed_t cfgetispeed(const struct termios *termptr); speed_t cfgetospeed(const struct termios *termptr); /* 两个函数的返回值:波特率值 */ int cfsetispeed(struct termios *termptr, speed_t speed); int cfsetospeed(struct termios *termptr, speed_t speed); /* 两个函数的返回值:若成功,返回 0;否则,返回 -1 */
其中,两个 cfget 函数的返回值,以及两个 cfset 函数的 speed 参数都是下列常量之一:B50、B75、B110、B134、B150、B200、B300、B600、B1200、B1800、B2400、B4800、B9600、B19200 或 B38400(多数系统还定义了另外的波特率值)。常量 B0 表示“挂断”。在调用 tcsetattr 时,如若将输出波特率指定为 B0,则调制解调器的控制线就不再起作用。
另外,使用这些函数时,必须认识到输入、输出波特率是存储在设备的 termios 结构中的。在调用任意一个 cfget 函数之前,要先用 tcgetattr 函数获得设备的 termios 结构。同理,在调用任意一个 cfset 函数后,还应当调用 tcsetattr 函数来使这种更改影响到设备。不过即使所设置的两个波特率中的任意一个出错,在调用 tcsetattr 之前可能也不会发现该错误。
下列 4 个函数提供了终端设备的行控制能力。它们都要求参数 fd 引用一个终端设备,否则出错返回 -1,并将 errno 设置为 ENOTTY。
#include <termios.h> int tcdrain(int fd); int tcflow(int fd, int action); int tcflush(int fd, int queue); int tcsendbreak(int fd, int duration); /* 四个函数的返回值:若成功,返回 0;否则,返回 -1 */
tcdrain 函数等待所有输出都被传递。
tcflow 函数用于对输入和输出流控制进行控制。action 参数是下列 4 个值之一。
* TCOOFF:输出被挂起。
* TCOON:重新启动以前被挂起的输出。
* TCIOFF:系统发送一个 STOP 字符,这将使终端设备停止发送数据。
* TCION:系统发送一个 START 字符,使终端设备恢复发送数据。
tcflush 函数冲洗(抛弃)输入缓冲区(其中的数据是终端驱动程序已接收到,但用户程序尚未读取的)或输出缓冲区(其中的数据是用户程序已经写入,但尚未被传递的)。queue 参数是下列 3 个常量之一。
* TCIFLUSH:冲洗输入队列。
* TCOFLUSH:冲洗输出队列。
* TCIOFLUSH:冲洗输入和输出队列。
tcsendbreak 函数在一个指定的时间区间内发送连续的 0 值位流。若 duration 参数为 0,则此种传递延续 0.25~0.5 秒。POSIX.1 说明若 duration 非 0,则传递时间依赖于实现。
推荐阅读
-
mysql的学习(七)-自定义函数和流程控制
-
Go语言中的流程控制结构和函数详解
-
Oracle数据库学习之查询的嵌套、事务控制语言、集合操作符和SQL函数讲解
-
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
-
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
-
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
-
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
-
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
-
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
-
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。