tcgetattr 和 tcsetattr

头文件

include <termios.h>

tcgeattr

tcgetattr函数,用来获取终端参数,成功返回零;失败则返回非零,发生失败接口将设置errno标识。

tcsetattr
tcsetattr函数,用来设置终端参数,成功返回零;失败则返回非零,发生失败接口将设置errno标识。

  • 函数原型
int tcgetattr(int fd, struct termios *termios_p);
参数fd为终端的文件描述符,返回的结果保存在termios 结构体中。

int tcsetattr(int fd, int optional_actions, 
const struct termios *termios_p);
参数fd为终端的文件描述符,参数optional_actions用于控制修改
起作用的时间,而结构体termios_p中保存了要修改的参数。

  • 终端文件描述符
    系统默认自动为进程的标准输入文件在文件描述符0上打开,标准输出文件在文件描述符1上打开,标准出错在文件描述符2上打开。通常情况下,是将输入设备(键盘)打开并复制到进程的标准输入(0)、将输出设备(显示器)打开并复制到标准输出(1)和标准出错(2)。(来自于这里

-struct termios结构体

//有关结构体的定义
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 */
#define _HAVE_STRUCT_TERMIOS_C_ISPEED 1
#define _HAVE_STRUCT_TERMIOS_C_OSPEED 1
  };
  • c_iflag

    输入模式标志,控制终端输入方式

键 值说 明
IGNBRK忽略BREAK键输入
BRKINT如果设置了IGNBRK,BREAK键的输入将被忽略,如果设置了BRKINT ,将产生SIGINT中断
IGNPAR忽略奇偶校验错误
PARMRK标识奇偶校验错误
INPCK允许输入奇偶校验
ISTRIP去除字符的第8个比特
INLCR将输入的NL(换行)转换成CR(回车)
IGNCR忽略输入的回车
ICRNL将输入的回车转化成换行(如果IGNCR未设置的情况下)
IUCLC将输入的大写字符转换成小写字符(非POSIX)
IXON允许输入时对XON/XOFF流进行控制
IXANY输入任何字符将重启停止的输出
IXOFF允许输入时对XON/XOFF流进行控制
IMAXBEL当输入队列满的时候开始响铃,Linux在使用该参数而是认为该参数总是已经设置
  • c_oflag

    输出模式标志,控制终端输出方式

键 值说 明
OPOST处理后输出
OLCUC将输入的小写字符转换成大写字符(非POSIX)
ONLCR将输入的NL(换行)转换成CR(回车)及NL(换行)
OCRNL将输入的CR(回车)转换成NL(换行)
ONOCR第一行不输出回车符
ONLRET不输出回车符
OFILL发送填充字符以延迟终端输出
OFDEL以ASCII码的DEL作为填充字符,如果未设置该参数,填充字符将是NUL(‘\0’)(非POSIX)
NLDLY换行输出延时,可以取NL0(不延迟)或NL1(延迟0.1s)
CRDLY回车延迟,取值范围为:CR0、CR1、CR2和 CR3
TABDLY水平制表符输出延迟,取值范围为:TAB0、TAB1、TAB2和TAB3
BSDLY空格输出延迟,可以取BS0或BS1
VTDLY垂直制表符输出延迟,可以取VT0或VT1
FFDLY换页延迟,可以取FF0或FF1
  • c_cflag
    控制模式标志,指定终端硬件控制信息
键 值说 明
CBAUD波特率(4+1位)(非POSIX)
CBAUDEX附加波特率(1位)(非POSIX)
CSIZE字符长度,取值范围为CS5、CS6、CS7或CS8
CSTOPB设置两个停止位
CREAD使用接收器
PARENB使用奇偶校验
PARODD对输入使用奇偶校验,对输出使用偶校验
HUPCL关闭设备时挂起
CLOCAL忽略调制解调器线路状态
CRTSCTS使用RTS/CTS流控制
  • c_lflag
    本地模式标志,控制终端编辑功能
键 值说 明
ISIG当输入INTR、QUIT、SUSP或DSUSP时,产生相应的信号
ICANON使用标准输入模式
XCASE在ICANON和XCASE同时设置的情况下,终端只使用大写。如果只设置了XCASE,则输入字符将被转换为小写字符,除非字符使用了转义字符(非POSIX,且Linux不支持该参数)
ECHO显示输入字符
ECHOE如果ICANON同时设置,ERASE将删除输入的字符,WERASE将删除输入的单词
ECHOK如果ICANON同时设置,KILL将删除当前行
ECHONL如果ICANON同时设置,即使ECHO没有设置依然显示换行符
ECHOPRT如果ECHO和ICANON同时设置,将删除打印出的字符(非POSIX)
TOSTOP向后台输出发送SIGTTOU信号
  • c_cc[NCCS]
    控制字符,用于保存终端驱动程序中的特殊字符,如输入结束符等
说 明说 明
VINTRInterrupt字符VEOL附加的End-of-file字符
VQUITQuit字符VTIME非规范模式读取时的超时时间
VERASEErase字符VSTOPStop字符
VKILLKill字符VSTARTStart字符
VEOFEnd-of-file字符VSUSPSuspend字符
VMIN非规范模式读取时的最小字符数
  • optional_actions
    用于控制修改起作用的时间
键值说明
TCSANOW不等数据传输完毕就立即改变属性。
TCSADRAIN等待所有数据传输结束才改变属性。
TCSAFLUSH清空输入输出缓冲区才改变属性。
  • 错误信息

    EBADF:非法的文件描述符。
    EINTR:tcsetattr函数调用被信号中断。
    EINVAL:参数optional_actions使用了非法值,或参数termios中使用了非法值。
    ENCTTY:非终端的文件描述符。

  • 设置键值的方式

	struct termios oldt, newt;
    tcgetattr(0, &oldt);/获取终端参数
    newt = oldt;
    newt.c_lflag &= ~(ICANON | ECHO);
    //&= ~ 是关闭的意思
    //|=  是打开的意思
    //最后要记得恢复原来终端的参数

转自链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值