真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Linux下的串口系列---structtermios結(jié)構(gòu)體

termios結(jié)構(gòu)體說明

 

termios結(jié)構(gòu)體中,該結(jié)構(gòu)體一般包括如下的成員:
tcflag_t c_iflag;      
tcflag_t c_oflag;      
tcflag_t c_cflag;      
tcflag_t c_lflag;     
cc_t     c_cc[NCCS];
  
  其具體意義如下
 c_iflag:輸入模式標(biāo)志,控制終端輸入方式,具體參數(shù)如下所示。

創(chuàng)新互聯(lián)公司是專業(yè)的橋東網(wǎng)站建設(shè)公司,橋東接單;提供成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行橋東網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

c_iflag參數(shù)表
鍵值說明
IGNBRK 忽略BREAK鍵輸入
BRKINT 如果設(shè)置了IGNBRK,BREAK鍵的輸入將被忽略,如果設(shè)置了BRKINT ,將產(chǎn)生SIGINT中斷
IGNPAR 忽略奇偶校驗(yàn)錯(cuò)誤
PARMRK 標(biāo)識(shí)奇偶校驗(yàn)錯(cuò)誤
INPCK 允許輸入奇偶校驗(yàn)
ISTRIP 去除字符的第8個(gè)比特
INLCR 將輸入的NL(換行)轉(zhuǎn)換成CR(回車)
IGNCR 忽略輸入的回車
ICRNL 將輸入的回車轉(zhuǎn)化成換行(如果IGNCR未設(shè)置的情況下)
IUCLC 將輸入的大寫字符轉(zhuǎn)換成小寫字符(非POSIX)
IXON 允許輸入時(shí)對(duì)XON/XOFF流進(jìn)行控制
IXANY 輸入任何字符將重啟停止的輸出
IXOFF 允許輸入時(shí)對(duì)XON/XOFF流進(jìn)行控制
IMAXBEL 當(dāng)輸入隊(duì)列滿的時(shí)候開始響鈴,Linux在使用該參數(shù)而是認(rèn)為該參數(shù)總是已經(jīng)設(shè)置

 c_oflag:輸出模式標(biāo)志,控制終端輸出方式,具體參數(shù)如下所示。
c_oflag參數(shù)
鍵值說明
OPOST 處理后輸出
OLCUC 將輸入的小寫字符轉(zhuǎn)換成大寫字符(非POSIX)
ONLCR 將輸入的NL(換行)轉(zhuǎn)換成CR(回車)及NL(換行)
OCRNL 將輸入的CR(回車)轉(zhuǎn)換成NL(換行)
ONOCR 第一行不輸出回車符
ONLRET 不輸出回車符
OFILL 發(fā)送填充字符以延遲終端輸出
OFDEL 以ASCII碼的DEL作為填充字符,如果未設(shè)置該參數(shù),填充字符將是NUL(‘/0’)(非POSIX)
NLDLY 換行輸出延時(shí),可以取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:控制模式標(biāo)志,指定終端硬件控制信息,具體參數(shù)如下所示。
c_oflag參數(shù)
鍵值說明
CBAUD 波特率(4+1位)(非POSIX)
CBAUDEX 附加波特率(1位)(非POSIX)
CSIZE 字符長(zhǎng)度,取值范圍為CS5、CS6、CS7或CS8
CSTOPB 設(shè)置兩個(gè)停止位
CREAD 使用接收器
PARENB 使用奇偶校驗(yàn)
PARODD 對(duì)輸入使用奇偶校驗(yàn),對(duì)輸出使用偶校驗(yàn)
HUPCL 關(guān)閉設(shè)備時(shí)掛起
CLOCAL 忽略調(diào)制解調(diào)器線路狀態(tài)
CRTSCTS 使用RTS/CTS流控制


c_lflag:本地模式標(biāo)志,控制終端編輯功能,具體參數(shù)如下所示。
c_lflag參數(shù)
鍵值說明
ISIG 當(dāng)輸入INTR、QUIT、SUSP或DSUSP時(shí),產(chǎn)生相應(yīng)的信號(hào)
ICANON 使用標(biāo)準(zhǔn)輸入模式
XCASE 在ICANON和XCASE同時(shí)設(shè)置的情況下,終端只使用大寫。如果只設(shè)置了XCASE,則輸入字符將被轉(zhuǎn)換為小寫字符,除非字符使用了轉(zhuǎn)義字符(非POSIX,且Linux不支持該參數(shù))
ECHO 顯示輸入字符
ECHOE 如果ICANON同時(shí)設(shè)置,ERASE將刪除輸入的字符,WERASE將刪除輸入的單詞
ECHOK 如果ICANON同時(shí)設(shè)置,KILL將刪除當(dāng)前行
ECHONL 如果ICANON同時(shí)設(shè)置,即使ECHO沒有設(shè)置依然顯示換行符
ECHOPRT 如果ECHO和ICANON同時(shí)設(shè)置,將刪除打印出的字符(非POSIX)
TOSTOP 向后臺(tái)輸出發(fā)送SIGTTOU信號(hào)

與此結(jié)構(gòu)體相關(guān)的函數(shù)
(一)tcgetattr()
1.原型
int tcgetattr(int fd,struct termois & termios_p);
2.
功能 
取得終端介質(zhì)(fd)初始值,并把其值 賦給temios_p;函數(shù)可以從后臺(tái)進(jìn)程中調(diào)用;但是,終端屬性可能被后來的前臺(tái)進(jìn)程所改變。

(二)tcsetattr() 
1.原型
int tcsetattr(int fd,int actions,const struct    termios *termios_p);
2.功能
設(shè)置與終端相關(guān)的參數(shù) (除非需要底層支持卻無法滿足),使用 termios_p 引用的 termios 結(jié)構(gòu)。optional_actions (tcsetattr函數(shù)的第二個(gè)參數(shù))指定了什么時(shí)候改變會(huì)起作用: 
TCSANOW:改變立即發(fā)生  
TCSADRAIN:改變?cè)谒袑懭?fd 的輸出都被傳輸后生效。這個(gè)函數(shù)應(yīng)當(dāng)用于修改影響輸出的參數(shù)時(shí)使用。(當(dāng)前輸出完成時(shí)將值改變)  
TCSAFLUSH :改變?cè)谒袑懭?fd 引用的對(duì)象的輸出都被傳輸后生效,所有已接受但未讀入的輸入都在改變發(fā)生前丟棄(同TCSADRAIN,但會(huì)舍棄當(dāng)前所有值)。 

(三)tcsendbreak()
  傳送連續(xù)的 0 值比特流,持續(xù)一段時(shí)間,如果終端使用異步串行數(shù)據(jù)傳輸?shù)脑?。如?duration 是 0,它至少傳輸 0.25 秒,不會(huì)超過 0.5 秒。如果 duration 非零,它發(fā)送的時(shí)間長(zhǎng)度由實(shí)現(xiàn)定義。 
如果終端并非使用異步串行數(shù)據(jù)傳輸,tcsendbreak() 什么都不做。

(四)tcdrain() 
等待直到所有寫入 fd 引用的對(duì)象的輸出都被傳輸。

(五)tcflush() 
丟棄要寫入 引用的對(duì)象,但是尚未傳輸?shù)臄?shù)據(jù),或者收到但是尚未讀取的數(shù)據(jù),取決于 queue_selector 的值:

TCIFLUSH :刷新收到的數(shù)據(jù)但是不讀  
TCOFLUSH :刷新寫入的數(shù)據(jù)但是不傳送  
TCIOFLUSH :同時(shí)刷新收到的數(shù)據(jù)但是不讀,并且刷新寫入的數(shù)據(jù)但是不傳送 

 (六)tcflow() 
掛起 fd 引用的對(duì)象上的數(shù)據(jù)傳輸或接收,取決于 action 的值:

TCOOFF :掛起輸出  
TCOON :重新開始被掛起的輸出  
TCIOFF :發(fā)送一個(gè) STOP 字符,停止終端設(shè)備向系統(tǒng)傳送數(shù)據(jù)  
TCION :發(fā)送一個(gè) START 字符,使終端設(shè)備向系統(tǒng)傳輸數(shù)據(jù)  
打開一個(gè)終端設(shè)備時(shí)的默認(rèn)設(shè)置是輸入和輸出都沒有掛起。

(七)波特率函數(shù) 
被用來獲取和設(shè)置 termios 結(jié)構(gòu)中,輸入和輸出波特率的值。新值不會(huì)馬上生效,直到成功調(diào)用了 tcsetattr() 函數(shù)。
設(shè)置速度為 B0 使得 modem "掛機(jī)"。與 B38400 相應(yīng)的實(shí)際比特率可以用 setserial(8) 調(diào)整。 
輸入和輸出波特率被保存于 termios 結(jié)構(gòu)中。 
cfmakeraw 設(shè)置終端屬性如下: 
            termios_p->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
            termios_p->c_oflag &= ~OPOST;
            termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
            termios_p->c_cflag &= ~(CSIZE|PARENB);
            termios_p->c_cflag |= CS8;

 1.cfgetospeed() 返回 termios_p 指向的 termios 結(jié)構(gòu)中存儲(chǔ)的輸出波特率 
2.cfsetospeed() 設(shè)置 termios_p 指向的 termios 結(jié)構(gòu)中存儲(chǔ)的輸出波特率為 speed。取值必須是以下常量之一: 
B0        B50        B75        B110        B134        B150        B200        B300        B600        B1200        B1800        B2400        B4800        B9600        B19200        B38400        B57600        B115200        B230400
其中:零值 B0 用來中斷連接。如果指定了 B0,不應(yīng)當(dāng)再假定存在連接。通常,這樣將斷開連接。CBAUDEX 是一個(gè)掩碼,指示高于 POSIX.1 定義的速度的那一些 (57600 及以上)。因此,B57600 & CBAUDEX 為非零。 
3.cfgetispeed() 返回 termios 結(jié)構(gòu)中存儲(chǔ)的輸入波特率。 
4.cfsetispeed() 設(shè)置 termios 結(jié)構(gòu)中存儲(chǔ)的輸入波特率為 speed。如果輸入波特率被設(shè)為0,實(shí)際輸入波特率將等于輸出波特率。

 RETURN VALUE 返回值
1.cfgetispeed() 返回 termios 結(jié)構(gòu)中存儲(chǔ)的輸入波特率。 
2.cfgetospeed() 返回 termios 結(jié)構(gòu)中存儲(chǔ)的輸出波特率。 
3.其他函數(shù)返回: 
  (1)0:成功 
  (2)  -1:失敗,
    并且為 errno 置值來指示錯(cuò)誤。 
注意 tcsetattr() 返回成功,如果任何所要求的修改可以實(shí)現(xiàn)的話。因此,當(dāng)進(jìn)行多重修改時(shí),應(yīng)當(dāng)在這個(gè)函數(shù)之后再次調(diào)用 tcgetattr() 來檢測(cè)是否所有修改都成功實(shí)現(xiàn)


文章名稱:Linux下的串口系列---structtermios結(jié)構(gòu)體
當(dāng)前URL:http://weahome.cn/article/jjggsj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部