linux 下串列埠程式設計VTIME和VMIN的設定

2021-07-31 07:17:23 字數 1434 閱讀 3728

1、串列埠的配置:

struct termios options;  // 串列埠配置結構體

tcgetattr(fd,&options); //獲取當前設定

bzero(&options,sizeof(options));

options.c_cflag  |= b115200 | clocal | cread; // 設定波特率,本地連線,接收使能

options.c_cflag &= ~csize; //遮蔽資料位

options.c_cflag  |= cs8; // 資料位為 8 ,cs7 for 7 

options.c_cflag &= ~cstopb; // 一位停止位, 兩位停止為 |= cstopb

options.c_cflag &= ~parenb; // 無校驗

|= parenb; //有校驗

&= ~parodd // 偶校驗

|=  parodd    // 奇校驗

options.c_cc[vtime] = 0; // 等待時間,單位百毫秒 (讀)。後有詳細說明

options.c_cc[vmin] = 0; // 最小位元組數 (讀)。後有詳細說明

tcflush(fd, tcioflush); // tciflush刷清輸入佇列。

tcoflush刷清輸出佇列。 

tcioflush刷清輸入、輸出佇列。

tcsetattr(fd, tcsanow, &options); // tcsanow立即生效;

tcsadrain:wait until everything has been transmitted;

tcsaflush:flush input and output buffers and make the change

2、vtime 和  vmin講解:

vtime定義要求等待的時間量(取值不能大於cc_t)。

vmin定義了要求等待的最小位元組數。

options.c_cc[vtime] = x;   //設定從獲取到1個位元組後開始計時的超時時間

options.c_cc[vmin] = y;     //設定要求等待的最小位元組數

在原始模式下對read()函式的影響:

1、x=0,y!=0。函式read()只有在讀取了y個位元組的資料或者收到乙個訊號的時候才返回;

2、x!=0,y=0。即使沒有資料可以讀取,read()函式等待x時間量後返回;

3、x!=0,y!=0。第乙個位元組資料到時開始,最先滿足收到y個位元組或達超時時間x任意乙個條件,read()返回;

4、x=0,y=0。即使讀取不到任何資料,函式read也會立即返回。

示例:通過串列埠連id卡讀卡器,要求讀串列埠至少收6個位元組資料立即返回,可以將串列埠的上述兩個設定項設定如下:

options.c_cc[vtime]=0;

options.c_cc[vmin]=6;

linux 下串列埠程式設計VTIME和VMIN的設定

vtime定義要求等待的時間量 取值不能大於cc t vmin定義了要求等待的最小位元組數。options.c cc vtime x 設定從獲取到1個位元組後開始計時的超時時間 options.c cc vmin y 設定要求等待的最小位元組數 在原始模式下對read 函式的影響 1 x 0,y 0...

linux 下串列埠程式設計VTIME和VMIN的設定

vtime定義要求等待的時間量 取值不能大於cc t vmin定義了要求等待的最小位元組數。options.c cc vtime x 設定從獲取到1個位元組後開始計時的超時時間 options.c cc vmin y 設定要求等待的最小位元組數 在原始模式下對read 函式的影響 1 x 0,y 0...

Linux下串列埠引數VTIME和VMIN的用法

vtime指定了等待的時間,vmin指定了讀取字元的最小數量。它們不同組合地取值會得到不同的結果,分別如下 1 當vtime 0,vmin 0時。read呼叫將保持阻塞直到讀取到第乙個字元,讀到了第乙個字元之後開始計時,此後若時間到了vtime或者時間未到但已讀夠了vmin個字元則會返回 若在時間未...