欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

波特率和行控制函数

程序员文章站 2022-07-01 09:14:37
...
    虽然大多数终端设备对输入和输出都使用同一波特率(即“位/秒”),但只要硬件允许,就可以使用下面 4 个函数将它们设置为不同的值。
#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,则传递时间依赖于实现。

上一篇: 终端标识

下一篇: 打开伪终端设备

推荐阅读