串列埠清空輸入輸出快取

2021-09-29 11:00:52 字數 947 閱讀 8639

在我們的工作中,串列埠是一種比較常用的資料傳輸方式。在某些應用場景下,當程式啟動並開啟串列埠後,我們不希望讀出串列埠開啟之前的輸入快取資料(即核心驅動已接收但是並未被應用層讀出的資料),因此需要對輸入快取資料進行清空(刷清、丟棄)操作。下面以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 一次讀取文字的一行資料,如果讀取到了檔案末尾返回...