原文鏈接tcflush()函數
tcflush函數刷清(扔掉)輸入緩存(終端驅動已接管到,但用戶尚未讀)或輸出緩存(用戶已經寫,但尚未發送).
int tcflush(int filedes,int quene)其中參數quene是下列三個常數之一:
TCIFLUSH 刷清輸入隊列
TCOFLUSH 刷清輸出隊列
TCIOFLUSH 刷清輸入、輸出隊列
例如:tcflush(fd,TCIFLUSH);
在打開串口後,串口其實已經可以開始讀取 數據了 ,這段時間用戶如果沒有讀取,將保存在緩衝區裏,如果用戶不想要開始的一段數據,或者發現緩衝區數據有誤,可以使用這個函數清空緩衝
tcflush(fdcom, TCIFLUSH);
sleep(2);
RecvLen = PortRecv(fdcom, RecvBuf, 10, portinfo.baudrate);
這樣,在sleep之前發的數據都被清空了。
注意:如果是在任務中,需要不停地寫入數據到串口設備,千萬不能在每次寫入數據到設備前,進行flush以前數據的操作,因爲兩次寫入的間隔是業務控制的,內核不會保證在兩次寫入之間一定把數據發送成功。flush操作一般在打開或者復位串口設備時進行操作。