簡(jiǎn)潔方式,顯示波特率
sttyspeed 38400 baud; line = 0;
eol = M-^?; eol2 = M-^?; swtch = M-^?;
ixany iutf8
顯示全部設(shè)置的命令
stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
重要一點(diǎn)
屬性前面的減號(hào)表示被禁止
沒(méi)有減號(hào)說(shuō)明使能
上面一堆在struct termios{} 中有對(duì)應(yīng)位,或者對(duì)應(yīng)字符,c_cc[]內(nèi)為對(duì)應(yīng)字符
在include/asm-i386/termbits.h中定義這個(gè)結(jié)構(gòu)及相應(yīng)位
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 */
};
輸入模式
c_iflag包含如下標(biāo)志:
/* c_iflag bits */
#define IGNBRK 0000001
#define BRKINT 0000002
#define IGNPAR 0000004
#define PARMRK 0000010
#define INPCK 0000020
#define ISTRIP 0000040
#define INLCR 0000100
#define IGNCR 0000200
#define ICRNL 0000400
#define IUCLC 0001000
#define IXON 0002000
#define IXANY 0004000
#define IXOFF 0010000
#define IMAXBEL 0020000
#define IUTF8 0040000
brkint 中斷時(shí)發(fā)出
INTR 信號(hào)。
-brkint 中斷時(shí)不發(fā)出
INTR 信號(hào)。
icrnl 輸入時(shí)將 CR 映射為 NL。
-icrnl 輸入時(shí)不將 CR 映射為 NL。
ignbrk 輸入時(shí)忽略 BREAK。
-ignbrk 輸入時(shí)不忽略 BREAK。
igncr 輸入時(shí)忽略 CR。
-igncr 輸入時(shí)不忽略 CR。
ignpar 忽略奇偶錯(cuò)誤。
-ignpar 不忽略奇偶錯(cuò)誤。
inlcr 輸入時(shí)將 NL 映射為 CR。
-inlcr 輸入時(shí)不將 NL 映射為 CR。
inpck 啟用奇偶校驗(yàn)。
-inpck 禁用奇偶校驗(yàn)。
istrip 將輸入字符剝離到 7 位。
-istrip 不將輸入字符剝離到 7 位。
iuclc 將大寫(xiě)字母字符映射為小寫(xiě)。
-iuclc 不將大寫(xiě)字母字符映射為小寫(xiě)。
ixany 允許任何字符重新啟動(dòng)輸出。
-ixany 只允許 START(Ctrl-Q 按鍵順序)重新啟動(dòng)輸出。
ixoff 當(dāng)輸入隊(duì)列接近空或滿時(shí),發(fā)送 START/STOP 字符。
-ixoff 不發(fā)送 START/STOP 字符。
ixon 啟用 START/STOP 輸出控制。一旦啟用 START/STOP 輸出控制,
您可以按下 Ctrl-S 按鍵順序暫停向工作站的輸出,也可按下 Ctrl-Q 按鍵順序恢復(fù)輸出。
-ixon 禁用 START/STOP 輸出控制。
imaxbel 當(dāng)輸入溢出時(shí),回送 BEL 字符并且廢棄最后的輸入字符。
-imaxbel 當(dāng)輸入溢出時(shí),廢棄所有輸入。
parmrk 標(biāo)記奇偶錯(cuò)誤。
-parmrk 不標(biāo)記奇偶錯(cuò)誤[1]。
輸出模式
c_oflag包含如下標(biāo)志:
/* c_oflag bits */
#define OPOST 0000001
#define OLCUC 0000002
#define ONLCR 0000004
#define OCRNL 0000010
#define ONOCR 0000020
#define ONLRET 0000040
#define OFILL 0000100
#define OFDEL 0000200
#define NLDLY 0000400
#define NL0 0000000
#define NL1 0000400
#define CRDLY 0003000
#define CR0 0000000
#define CR1 0001000
#define CR2 0002000
#define CR3 0003000
#define TABDLY 0014000
#define TAB0 0000000
#define TAB1 0004000
#define TAB2 0010000
#define TAB3 0014000
#define XTABS 0014000
#define BSDLY 0020000
#define BS0 0000000
#define BS1 0020000
#define VTDLY 0040000
#define VT0 0000000
#define VT1 0040000
#define FFDLY 0100000
#define FF0 0000000
#define FF1 0100000
bs0, bs1 為退格符選擇延遲樣式(bs0 表示沒(méi)有延遲)。
cr0, cr1, cr2, cr3 為 CR 字符選擇延遲樣式(cr0 表示沒(méi)有延遲)。
ff0, ff1 為換頁(yè)選擇延遲樣式(ff0 表示沒(méi)有延遲)。
nl0, nl1 為 NL 字符選擇延遲樣式(nl0 表示沒(méi)有延遲)。
ofill 使用延遲填充字符。
-ofill 使用延遲定時(shí)。
ocrnl 將 CR 字符映射為 NL 字符。
-ocrnl 不將 CR 字符映射為 NL 字符。
olcuc 輸出時(shí)將小寫(xiě)字母字符映射為大寫(xiě)。
-olcuc 輸出時(shí)不將小寫(xiě)字母字符映射為大寫(xiě)。
onlcr 將 NL 字符映射為 CR-NL 字符。
-onlcr 不將 NL 字符映射為 CR-NL 字符。
onlret 在終端 NL 執(zhí)行 CR 功能。
-onlret 在終端 NL 不執(zhí)行 CR 功能。
onocr 不在零列輸出 CR 字符。
-onocr 在零列輸出 CR 字符。
opost 處理輸出。
-opost 不處理輸出;即忽略所有其它輸出選項(xiàng)。
ofdel 使用 DEL 字符作為填充字符。
-ofdel 使用 NUL 字符作為填充字符。
tab0, tab1, tab2 為水平制表符選擇延遲樣式(tab0 表示沒(méi)有延遲)。
tab3 擴(kuò)展制表符至多個(gè)空格。
vt0, vt1 為垂直制表符選擇延遲樣式(vt0 表示沒(méi)有延遲)[1]。
控制模式
/* c_cflag bit meaning */
#define CBAUD 0010017
#define B0 0000000 /* hang up */
#define B50 0000001
#define B75 0000002
#define B110 0000003
#define B134 0000004
#define B150 0000005
#define B200 0000006
#define B300 0000007
#define B600 0000010
#define B1200 0000011
#define B1800 0000012
#define B2400 0000013
#define B4800 0000014
#define B9600 0000015
#define B19200 0000016
#define B38400 0000017
#define EXTA B19200
#define EXTB B38400
#define CSIZE 0000060
#define CS5 0000000
#define CS6 0000020
#define CS7 0000040
#define CS8 0000060
#define CSTOPB 0000100
#define CREAD 0000200
#define PARENB 0000400
#define PARODD 0001000
#define HUPCL 0002000
#define CLOCAL 0004000
#define CBAUDEX 0010000
#define B57600 0010001
#define B115200 0010002
#define B230400 0010003
#define B460800 0010004
#define B500000 0010005
#define B576000 0010006
#define B921600 0010007
#define B1000000 0010010
#define B1152000 0010011
#define B1500000 0010012
#define B2000000 0010013
#define B2500000 0010014
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
#define CIBAUD 002003600000 /* input baud rate (not used) */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
clocal 假定一行沒(méi)有調(diào)制解調(diào)器控制。
-clocal 假定一行帶有調(diào)制解調(diào)器控制。
cread 啟用接收器。
-cread 禁用接收器。
cstopb 每個(gè)字符選擇兩個(gè)停止位。
-cstopb 每個(gè)字符選擇一個(gè)停止位。
cs5, cs6, cs7, cs8 選擇字符大小。
hup, hupcl 最后關(guān)閉時(shí)掛起撥號(hào)連接。
-hup, -hupcl 最后關(guān)閉時(shí)不掛起撥號(hào)連接。
parenb 啟用奇偶性校驗(yàn)的生成和檢測(cè)。
-parenb 禁用奇偶性校驗(yàn)的生成和檢測(cè)。
parodd 選擇奇校驗(yàn)。
-parodd 選擇偶校驗(yàn)。
0 立即掛起電話線路。
speed 將工作站輸入和輸出速度設(shè)置為指定的 speed 數(shù)(以位/秒為單位)。
并不是所有的硬件接口都支持所有的速度。
speed 的可能值有:50、75、110、134、200、300、600、1200、1800、
2400、4800、9600、19200、19.2、38400、38.4、exta 和 extb。
注:
exta、19200 和 19.2 是同義詞;extb、38400 和 38.4 是同義詞。
ispeed speed 將工作站輸入速度設(shè)置為指定的 speed 數(shù)(以位/秒為單位)。
并不是所有的硬件接口都支持所有的速度,而且并不是所有的硬件接口都支持該選項(xiàng)。
speed 的可能值與 speed 選項(xiàng)相同。
ospeed speed 將工作站輸出速度設(shè)置為指定的 speed 數(shù)(以位/秒為單位)。
并不是所有的硬件接口都支持所有的速度,而且并不是所有的硬件接口都支持該選項(xiàng)。
speed 的可能值與 speed 選項(xiàng)相同[1]。
本地模式
/* c_lflag bits */
#define ISIG 0000001
#define ICANON 0000002
#define XCASE 0000004
#define ECHO 0000010
#define ECHOE 0000020
#define ECHOK 0000040
#define ECHONL 0000100
#define NOFLSH 0000200
#define TOSTOP 0000400
#define ECHOCTL 0001000
#define ECHOPRT 0002000
#define ECHOKE 0004000
#define FLUSHO 0010000
#define PENDIN 0040000
#define IEXTEN 0100000
echo 回送每個(gè)輸入的字符。
-echo 不回送字符。
echoctl 以 ^X(Ctrl-X)回送控制字符,X 是將 100 八進(jìn)制加到控制字符代碼中給出的字符。
-echoctl 不以 ^X(Ctrl-X)回送控制字符。
echoe 以“backspace space backspace”字符串回送 ERASE 字符。
注:
該模式不保持對(duì)列位置的跟蹤,因此您可能在擦除制表符和轉(zhuǎn)義序列等符號(hào)時(shí)得到意外的結(jié)果。
-echoe 不回送 ERASE 字符,只回送退格符。
echok 在 KILL 字符后回送 NL 字符。
-echok 在 KILL 字符后不回送 NL 字符。
echoke 通過(guò)擦除輸出行上的每個(gè)字符,回送 KILL 字符。
-echoke 只回送 KILL 字符。
echonl 回送 NL 字符。
-echonl 不回送 NL 字符。
echoprt 以 /(斜杠)和 \ (反斜杠) 向后回送擦除的字符。
-echoprt 不以 /(斜杠)和 \ (反斜杠) 向后回送擦除的字符。
icanon 啟用規(guī)范輸入(規(guī)范輸入允許使用 ERASE 和 KILL 字符進(jìn)行輸入行的編輯)。
請(qǐng)參閱 AIX 5L Version 5.2 Communications Programming Concepts 中的
Line Discipline Module (ldterm) 中關(guān)于 canonical mode input 的討論。
-icanon 禁用規(guī)范輸入。
iexten 指定從輸入數(shù)據(jù)中識(shí)別實(shí)現(xiàn)性定義的功能。
要識(shí)別以下控制字符,
需要設(shè)置 iexten:eol2、dsusp、reprint、discard、werase、lnext。
與這些模式關(guān)聯(lián)的功能也需要設(shè)置 iexten:imaxbel、echoke、echoprt、echoctl。
-iexten 指定從輸入數(shù)據(jù)中識(shí)別實(shí)現(xiàn)性定義的功能。
isig 啟用對(duì)特殊控制字符(
INTR、SUSP 和 QUIT 特殊控制字符)的字符檢查。
-isig 禁用對(duì)特殊控制字符(
INTR、SUSP 和 QUIT 特殊控制字符)的字符檢查。
noflsh 不清除
INTR、SUSP 或 QUIT 控制字符之后的緩沖區(qū)。
-noflsh 清除
INTR、SUSP 或 QUIT 控制字符之后的緩沖區(qū)。
pending 下次讀操作暫掛或輸入到達(dá)時(shí),要重新輸入從原始模式轉(zhuǎn)換為規(guī)范模式后被暫掛的輸入。
暫掛是一個(gè)內(nèi)部狀態(tài)位。
-pending 沒(méi)有文本暫掛。
tostop 為背景輸出發(fā)出 SIGTOU 信號(hào)。
-tostop 不為背景輸出發(fā)出 SIGTOU 信號(hào)。
xcase 在輸入中回送大寫(xiě)字符,并在輸出顯示的大寫(xiě)字符之前加上 \ (反斜杠)。
-xcase 不在輸入時(shí)回送大寫(xiě)字符[1]。
控制字符
/* c_cc characters */
#define VINTR 0
#define VQUIT 1
#define VERASE 2
#define VKILL 3
#define VEOF 4
#define VTIME 5
#define VMIN 6
#define VSWTC 7
#define VSTART 8
#define VSTOP 9
#define VSUSP 10
#define VEOL 11
#define VREPRINT 12
#define VDISCARD 13
#define VWERASE 14
#define VLNEXT 15
#define VEOL2 16
控制指定
要將一個(gè)控制字符指定到某字符串中,請(qǐng)輸入:
stty Control String
其中,Control 參數(shù)可以是
INTR、QUIT、ERASE、KILL、EOF、EOL、EOL2、START、STOP、
SUSP、DSUSP、REPRINT、DISCARD、WERASE、
LNEXT、MIN 或 TIME 參數(shù)。(使用字符 MIN 和 TIME 時(shí),請(qǐng)加上 -icanon 選項(xiàng)。)[1]
試驗(yàn)
打印出終端的行數(shù)和列數(shù)
stty size
24 80
即24行,80列
stty cols 25
把列設(shè)為25行,發(fā)現(xiàn)輸出變窄
stty -a
speed 38400 baud;
rows 24; columns 25;
line = 0;
intr = ^C; quit = ^\;
erase = ^?; kill = ^U;
eof = ^D; eol = <undef>;
eol2 = <undef>;
swtch = <undef>;
start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V;
flush = ^O;
min = 1; time = 0;
-parenb -parodd cs8 hupcl
-cstopb cread -clocal
-crtscts
-ignbrk brkint ignpar
-parmrk -inpck istrip
-inlcr -igncr icrnl ixon
-ixoff -iuclc -ixany
imaxbel -iutf8
opost -olcuc -ocrnl onlcr
-onocr -onlret -ofill
-ofdel nl0 cr0 tab0 bs0
vt0 ff0
isig icanon iexten echo
echoe echok -echonl
-noflsh -xcase -tostop
-echoprt echoctl echoke
stty speed
顯示速率
stty intr c
c變?yōu)橹袛噫I,想輸入c不可能了。
stty raw
發(fā)現(xiàn)ctrl+c不管用了,輸出混亂
允許原始模式輸入(不包括輸入處理,例如 erase、kill 或 interrupt);傳回奇偶(校驗(yàn))位。
stty -raw
允許規(guī)范輸入方式。
在命令行下,禁止輸出大寫(xiě)的方法
stty iuclc #開(kāi)啟
stty -iuclc #恢復(fù)
在命令行下禁止輸出小寫(xiě)
stty olcuc #開(kāi)啟
stty -olcuc#恢復(fù)
stty sane
將參數(shù)重新設(shè)置為合理的值。
忽略回車符
stty igncr #開(kāi)啟
發(fā)現(xiàn)enter不起作用了,要顯示執(zhí)行效果,需用ctrl+j
stty -igncr#恢復(fù),要顯示執(zhí)行效果,需用ctrl+j
stty erase x
退格刪除鍵變成x,想輸入x,不可能了,因?yàn)閤是退格鍵
stty erase ^?返回原來(lái)退格鍵
stty -echo
發(fā)現(xiàn)按鍵,什么也沒(méi)有出現(xiàn)
stty echo
輸入顯示
stty -icanon
關(guān)閉驅(qū)動(dòng)程序中的規(guī)范模式處理,跳過(guò)緩沖層,用戶不能刪除字符,
測(cè)試一下
gui.c
#include<stdio.h>
main()
{
char c;
FILE *fp_tty;
fp_tty=fopen("/dev/tty","r");
if(fp_tty==NULL)
exit(1);
while((c=getc(fp_tty))!=EOF)
{
printf("%d",c);
}
}
gcc gui.c -o gui
stty icanon
./gui
d
10010f
10210d
10010f
10210
可以用退格鍵,并且顯示數(shù)字還得按回車鍵, 從10( enter)就可以看出來(lái)
stty -icanon
./gui
d100f102g103h104
10
關(guān)閉規(guī)范模式后發(fā)現(xiàn),按退格鍵不管用,并且直接顯示,不用按回車鍵