Linux串列埠中的超時設定

2021-08-10 06:32:19 字數 842 閱讀 6937

在linux下使用串列埠通訊時,預設的阻塞模式是不實用的。而採用select或epoll機制的非阻塞模式,寫**有比較麻煩。幸好linux的串列埠自己就帶有超時機制。

linux下使用termios.h中的的介面進行串列埠設定。

使用termios.h的介面進行超時設定,主要是配置 vtime 和 vmin 兩個字段。其中vtime指定了等待的時間(timeout=vtime*100ms),vmin指定了讀取字元的最小數量。

注意要使這兩個字段生效,必須使串列埠工作於非標準模式。

可以通過如下方式設定為raw模式(非標準模式的一種,多用於通訊):/* struct termio newtio; */

newtio.c_lflag &= ~(icanon | echo | echoe | isig); /*input*/

newtio.c_oflag &= ~opost; /*output*/

vtime和vmin需配合使用,它們的組合關係如下:

1、vtime=0,vmin=0:此時即使讀取不到任何資料,函式read也會返回,返回值是0。

2、vtime=0,vmin>0:read呼叫一直阻塞,直到讀到vmin個字元後立即返回。

3、vtime>0,vmin=0:read呼叫讀到資料則立即返回,否則將為每個字元最多等待 vtime*100ms 時間。

4、vtime>0,vmin>0:read呼叫將保持阻塞直到讀取到第乙個字元,讀到了第乙個字元之後開始計時,此後若時間到了 vtime*100ms 或者時間未到但已讀夠了vmin個字元則會返回。

若在時間未到之前又讀到了乙個字元(但此時讀到的總數仍不夠vmin)則計時重新開始(即每個字元都有vtime*100ms的超時時間)。

Linux串列埠的設定

設定流控制 termios new.c cflag crtscts 不使用流控制 termios new.c cflag crtscts 使用硬體流控制 termios new.c iflag ixon ixoff ixany 使用軟體流控制 設定資料位大小 termios new.c cflag ...

linux 設定connect 超時

將乙個socket 設定成阻塞模式和非阻塞模式,使用fcntl方法,即 設定成非阻塞模式 先用fcntl的f getfl獲取flags,用f setfl設定flags o nonblock 即 flags fcntl sockfd,f getfl,0 獲取檔案的flags值。fcntl sockfd...

CreateFile在串列埠中的運用

在32位的windows系統中,串列埠和其他通訊裝置是作為檔案處理的。對串列埠的操作和對檔案的操作是完全一樣的。通訊以呼叫createfile 開始。函式原型如下 handle createfile lpctstr lpfilename,指向檔名的指標 dword dwdesiredaccess,訪...