POSIX(linux)终端(串口)接口设置


 
 
POSIX终端接口

大多数系统都支持POSIX终端接口,POSIX终端通过一个termios结构来进行控制,该结构定义在termios.h文件中。

termios结构

struct termios

{

tcflag_t c_iflag; /* 输入选项标志 */

tcflag_t c_oflag; /* 输出选项标志 */

tcflag_t c_cflag; /* 控制选项标志 */

tcflag_t c_lflag; /* 本地选项标志 */

cc_t c_cc[NCCS]; /* 控制特性 */

};

c_iflag成员

Flag Description

GNBRK 忽略输入中的BREAK状态

BRKINT 如果设置了IGNBRK,将忽略BREAK。如果没有设置,但是设置了BRKINT,那么BREAK将使得输入和输出队列被刷新,如果终端是一个前台进程 组的控制终端,这个进程组中所有进程将收到SIGINT信号。如果既未设置IGNBRK也未设置BRKINT,BREAK将视为NUL同义字符,除非设置 了PARMRK,这种情况下被视为序列/377/0/0

IGNPAR 忽略桢错误和奇偶校验错误

PARMRK 如果没有设置IGNPAR,在有奇偶校验错误或者桢错误的字符前插入/377/0。如果既没有设置IGNPAR也没有设置PARMRK,将所有奇偶校验错误或者桢错误的字符视为/0。

INPCK 启用输入奇偶校验检测。

ISTRIP 去掉第八位。

INLCR 将输入的NL翻译为CR。

IGNCR 忽略输入中的回车。

ICRNL 将输入中的回车翻译为新行字符(除非设置了IGNCR)。

IUCLC (不属于POSIX)将输入中的大写字母映射为小写字母。

IXON 启用输出的XON/XOFF流控制

IXANY (不属于POSIX。1;XSI)允许任何字符来重新开始输出。

IXOFF 启用输入的XON/XOFF流控制

IMAXBEL (不属于POSIX)当输入队列满时响铃。LINUX没有实现该位,总是将其视为已设置。

 

c_oflag成员

Flag Description

OPOST 启用具体实现自行定义的输出。

OLCUC (不属于POSIX)将输出中的小写字母映射为大写字母。

ONLCR (XSI)将输出中的新行符映射为回车-换行

OCRNL 将输出中的回车映射为新行符。

ONOCR 不在第0列输出回车。

ONLRET 不输出回车。

OFILL 发送填充字符作为延时。

OFDEL (不属于POSIX)填充字符是ASCII DEL(0177)。如果不设置填充字符则是ASCII NUL。

NLDLY 新行延时掩码。取值为NL0和NL1。

CRDLY 回车延时掩码。取值为CR0,CR1,CR2或CR3。

TABDLY 水平跳格延时掩码。取值为TAB0,TAB1,TAB2,TAB3(或XTABS)。取值为TAB3,即XTABS,将扩展跳格为空格(每个跳格符填充8个空格)。

BSDLY 回车延时掩码。取值为BS0或BS1.(从来没有被实现)

VTDLY 竖直跳格掩码。取值为VT0或VT1。

FFDLY 进表延时掩码。取值为FF0或者FF1。 

c_cflag成员

Flag Description

CBAUD (不属于POSIX)波特率掩码(4+1位)。

CBAUDEX (不属于POSIX)扩展的波特率掩码(1位),包含在CBAUD中。

CSIZE 字符长度掩码。取值为CS5,CS6,CS7或CS8。

CSTOPB 设置两个停止位。

CREAD 打开接受者。

PARENB 允许输出产生奇偶信息以及输入的奇偶校验。

PARODD 输入和输出是奇校验

HUPCL 在最后一个进程关闭设备后,降低MODEM控制线(挂断)。

CLOCAL 忽略MODEM控制线。

LOBLK (不属于POSIX)从非当前SHELL层阻塞输出(用于sh1)。

CIBAUD (不属于POSIX)输入速度的掩码。CIBAUD各位的值与CBAUD各位相同,左移了IBSHIFT位。

CRTSCTS (不属于POSIX)启用RTS/CTS(硬件)控制流。

 

c_lflag成员

Flag Description

ISIG 当接收到字符INTR,QUIT,SUSP或DSUSP时,产生相应的信号。

XCASE (不属于POSIX;LINUX下不支持)如果同时设置了ICANON,终端只有大写。输入被转换为小写,除了以/前缀的字符。输出时,大写字符被前缀/,小写字符被转换成大写。

ECHO 回显输入字符。

ECHOE 如果同时设置了ICANON,字符ERASE擦除前一个输入字符,WERASE擦除前一个词。

ECHOK 如果同时设置了ICANON,字符KILL删除当前行。

ECHONL 如果同时设置了ICANON,回显字符NL,即使没有设置ECHO。

ECHOCTL (不属于POSIX)如果同时设置了ECHO,除了TAB,NL,START和STOP之外的ASCII控制信号被回显为^x,这里X是比控制信号大0x40的ASCII码。例如字符0x08(BS)被回显为^H。

ECHOPRT (不属于POSIX)如果同时设置了ICANON和IECHO,字符在删除的同时被打印。

ECHOKE (不属于POSIX)如果同时设置了ICANON,回显KILL时将删除一行中的每个字符,如同指定了ECHOE和ECHORPT一样。

DEFECHO (不属于POSIX)只在一个进程读的时候回显。

FLUSHO (不属于POSIX;LINUX不支持)输出被刷新。这个标志可以通过键入字符DISCARD来打开和关闭。

NOFLSH 禁止产生SIGINT,SIGQUIT和SIGSUSP信号时刷新输入和输出队列。

TOSTOP 向试图写控制终端的后台进程组发送SIGTTOU信号。

PENDIN (不属于POSIX;LINUX不支持)在读入一个字符时,输入队列中的所有字符被重新输出。(bash用他来处理typeahead)。

IEXTEN 启用实现自定义的输入处理。这个标志必须与ICANON同时使用,才能解释特殊字符EOL2,LNEXT,REPRINT和WERASE,IUCLC标志才有效。 

c_cc数组成员

Flag Description

VINTR (003,ETX,Ctrl-C,or also 0177, DEL, rubout)中断字符。发送SIGINT信号。当设置ISIG时可被识别,不再作为输入传递。

VQUIT (034,FS,Ctrl-/)退出字符。发出SIGQUIT信号。当设置ISIG时可被识别,不再作为输入传递。

VERASE (0177, DEL, rubout, or 010, BS, Ctrl-H, or also #) 删除字符。删除上一个还没有删掉的字符,但不删除上一个 EOF 或行首。当设置 ICANON 时可被识别,不再作为输入传递。

VKILL (025, NAK, Ctrl-U, or Ctrl-X, or also @) 终止字符。删除自上一个 EOF 或行首以来的输入。当设置 ICANON 时可被识别,不再作为输入传递。

VEOF (004, EOT, Ctrl-D) 文件尾字符。更精确地说,这个字符使得 tty 缓冲中的内容被送到等待输入的用户程序中,而不必等到 EOL。如果它是一行的第一个字符,那么用户程序的 read() 将返回 0,指示读到了 EOF。当设置 ICANON 时可被识别,不再作为输入传递。

VMIN 非 canonical 模式读的最小字符数。 VEOL (0, NUL) 附加的行尾字符。当设置 ICANON 时可被识别。 VTIME 非 canonical 模式读时的延时,以十分之一秒为单位。 VEOL2 (not in POSIX; 0, NUL) 另一个行尾字符。当设置 ICANON 时可被识别。

VEOL (0, NUL) 附加的行尾字符。当设置 ICANON 时可被识别。

VTIME 非 canonical 模式读时的延时,以十分之一秒为单位。

VEOL2 (not in POSIX; 0, NUL) 另一个行尾字符。当设置 ICANON 时可被识别。

VSWTCH (not in POSIX; not supported under Linux; 0, NUL) 开关字符。(只为 shl 所用。)

VSTART (021, DC1, Ctrl-Q) 开始字符。重新开始被 Stop 字符中止的输出。当设置 IXON 时可被识别,不再作为输入传递。

VSTOP (023, DC3, Ctrl-S) 停止字符。停止输出,直到键入 Start 字符。当设置 IXON 时可被识别,不再作为输入传递。

VSUSP (032, SUB, Ctrl-Z) 挂起字符。发送 SIGTSTP 信号。当设置 ISIG 时可被识别,不再作为输入传递。

VDSUSP (not in POSIX; not supported under Linux; 031, EM, Ctrl-Y) 延时挂起信号。当用户程序读到这个字符时,发送 SIGTSTP 信号。当设置 IEXTEN 和 ISIG,并且系统支持作业管理时可被识别,不再作为输入传递。

VLNEXT (not in POSIX; 026, SYN, Ctrl-V) 字面上的下一个。引用下一个输入字符,取消它的任何特殊含义。当设置 IEXTEN 时可被识别,不再作为输入传递。

VWERASE (not in POSIX; 027, ETB, Ctrl-W) 删除词。当设置 ICANON 和 IEXTEN 时可被识别,不再作为输入传递。

VREPRINT (not in POSIX; 022, DC2, Ctrl-R) 重新输出未读的字符。当设置 ICANON 和 IEXTEN 时可被识别,不再作为输入传递。

VDISCARD (not in POSIX; not supported under Linux; 017, SI, Ctrl-O) 开关:开始/结束丢弃未完成的输出。当设置 IEXTEN 时可被识别,不再作为输入传递。

VSTATUS (not in POSIX; not supported under Linux; status request: 024, DC4, Ctrl-T).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值