在我們的工作中,串列埠是一種比較常用的資料傳輸方式。在某些應用場景下,當程式啟動並開啟串列埠後,我們不希望讀出串列埠開啟之前的輸入快取資料(即核心驅動已接收但是並未被應用層讀出的資料),因此需要對輸入快取資料進行清空(刷清、丟棄)操作。下面以linux系統上串列埠程式設計為例進行說明:
測試環境
硬體環境:pc
作業系統:ubuntu 14.04虛擬機器
#include #include
方法一
fd = open("devpath", o_rdwr|o_noctty);
usleep(200000);
tcflush(fd, tciflush); //清空輸入快取
tcflush(fd, tcoflush); //清空輸出快取
tcflush(fd, tcioflush); //清空輸入輸出快取
tcsetattr(m_ifd, tcsanow, &strctnewtermios);
方法二
fd = open("devpath", o_rdwr|o_noctty);
usleep(200000);
ioctl(fd, tcflsh, 0); //清空輸入快取
ioctl(fd, tcflsh, 1); //清空輸出快取
ioctl(fd, tcflsh, 2); //清空輸入輸出快取
tcsetattr(fd, tcsanow, &strctnewtermios);
必須在open和tcflush(或ioctl)操作間進行延時操作(具體時間未做驗證),否則沒有清空效果,原因未知,可能跟linux核心版本有關
可自由選擇只清空輸入或只清空輸出或兩者都清空
tcflush和ioctl兩種方法均有效,注意ioctl的第二個引數是tcflsh原文
scanf 「 c」 等問題,清空輸入輸出快取
c語言學習者經常會遇到printf 和scanf 的一些問題,沒有正確輸出或者輸入。例如scanf c ch 沒有接收到輸入字元。或者輸出printf n 不會換行的問題。舉個例子 include int main 上面這個 執行出錯 原因 清除上乙個scanf的快取,因為它接受了乙個數字和回車符號...
普通IO模擬串列埠輸入輸出。
目標 普通io埠中輸入輸出模擬串列埠通訊。串列埠空閒狀態時為高電平,在空閒時當接收到高電平轉低電平時,那麼下一位時間電平開發送8個資料據,資料位從第一位開始到第8位從高到低傳送。傳送完8個資料位後會傳送乙個停止位,就10位資料。下面以9600的波特率為例說明。第一步,選擇好波特率,這裡用9600。第...
68 快取輸入輸出字元流
輸入字元流 reader 輸入字元流的基類。抽象類 filereader 讀取檔案的輸入字元流 bufferedreader 快取輸入字元流 提高效率和擴充套件了filereader的功能 內部其實也維護了乙個字元陣列 擴充套件功能 readline 一次讀取文字的一行資料,如果讀取到了檔案末尾返回...