Linux 串列埠程式設計配置相關(一)

2021-09-06 20:19:49 字數 4769 閱讀 7658

1.termios 結構體

tcflag_t c_iflag;      /* input modes */

tcflag_t c_oflag;      /* output modes */

tcflag_t c_cflag;      /* control modes */

tcflag_t c_lflag;      /* local modes */

cc_t     c_cc[nccs];   /* special characters */

2.c_iflag輸入模式配置

ignbrk  忽略輸入中的 break 狀態。

brkint  在break 時產生sigint 訊號。

ignpar  忽略奇偶校驗出錯的字元

parmrk  標記奇偶校驗錯 

inpck   允許輸入奇偶校驗。

istrip  遮蔽字元第8位。

inlcr    將輸入中的 nl 翻譯為 cr。

igncr   忽略輸入中的回車。

icrnl   將輸入中的回車翻譯為新行 (除非設定了 igncr)。

iuclc   將輸入中的大寫字母對映為小寫字母。

ixon   啟用輸出的 xon/xoff 流控制。

ixany  允許任何字元來重新開始輸出。

ixoff  啟用輸入的 xon/xoff 流控制。

imaxbel 當輸入佇列滿時響零。linux 沒有實現這一位,總是將它視為已設定。

3.c_oflag 輸出模式配置

opost  執行輸出處理

olcuc  將輸出中的小寫字母對映為大寫字母。

onlcr  將輸出中的新行符對映為回車-換行。

ocrnl  將輸出中的回車對映為新行符

onocr  不在第 0 列輸出回車。

onlret 不輸出回車。

ofill  傳送填充字元作為延時,而不是使用定時來延時。

ofdel 填充字元是 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。

4.c_cflag 控制模式配置

cbaud  波特率掩碼

csize   字元長度掩碼。取值為 cs5, cs6, cs7, 或 cs8

cstopb 設定兩個停止位,而不是乙個

cread  允許接收

parenb  開啟輸出時產生奇偶位、輸入時進行奇偶校驗

parodd  輸入和輸出是奇校驗

hupcl   最後程序關閉後結束通話

clocal  忽略 modem控制線。

crtscts  啟用 rts/cts (硬體)流控制。

5.c_lflag 本地模式配置

isig   當接受到字元 intr, quit, susp, 或 dsusp時,產生相應的訊號。

icanon  啟用標準模式 (canonical mode)。允許使用特殊字元 eof, eol, eol2, erase, kill, lnext, reprint, status,和 werase,以及按行的緩衝。

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 和 echoprt 一樣。

defecho 只在乙個程序讀的時候回顯。

flusho  輸出被重新整理。這個標誌可以通過鍵入字元 discard 來開關。

noflsh 禁止在產生 sigint, sigquit 和 sigsusp訊號時重新整理輸入和輸出佇列。

tostop 向試圖寫控制終端的後台程序組傳送 sigttou 訊號。

pendin 在讀入下乙個字元時,輸入佇列中所有字元被重新輸出。  

iexten  啟用實現時定義的輸入處理。這個標誌必須與 icanon同時使用,才能解釋特殊字元 eol2,lnext,reprint和 werase,iuclc標誌才有效。

6.c_cc特殊控制組

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 時可被識別。

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).

這些符號下標值是互不相同的,除了 vtime,vmin的值可能分別與 veol,veof相同。 (在 non-canonical模式下,特殊字元的含義更改為延時含義。min 表示應當被讀入的最小字元數。time是以十分之一秒為單位的計時器。如果同時設定了它們,read 將等待直到至少讀入乙個字元,一旦讀入 min 個字元或者從上次讀入字元開始經過了 time時間就立即返回。如果只設定了 min,read在讀入 min 個字元之前不會返回。如果只設定了 time,read將在至少讀入乙個字元,或者計時器超時的時候立即返回。如果都沒有設定,read將立即返回,只給出當前準備好的字元。)

linux串列埠程式設計

include 標準輸入輸出定義 include 標準函式庫定義 include unix標準函式定義 include include include 檔案控制定義 include ppsix終端控制定義 include 錯誤號定義 brief 設定串列埠通訊速率 param fd 型別 int 開...

Linux串列埠程式設計

串列埠概述 常見資料通訊方式 並行通訊,序列通訊 uart的主要操作 資料傳送及接受 產生中斷 產生波特率 loopback模式 紅外模式 自動流控模式 串列埠引數的配置主要包括 波特率 資料位 停止位 流控協議。linux中的串列埠裝置檔案放於 de 目錄下,串列埠一,串列埠二分別為 dev tt...

Linux串列埠程式設計

串列埠概述 常見資料通訊方式 並行通訊,序列通訊 uart的主要操作 資料傳送及接受 產生中斷 產生波特率 loopback模式 紅外模式 自動流控模式 串列埠引數的配置主要包括 波特率 資料位 停止位 流控協議。linux中的串列埠裝置檔案放於 de 目錄下,串列埠一,串列埠二分別為 dev tt...