我使用socat來創建一個虛擬串口:如何使讀取功能不會掛起?
socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1
的,我用C++編寫的程序,我打開ttySV1接口,即可開始閱讀。
讀取函數是在一段時間,但問題是讀取函數掛起,直到我發送數據到端口。你知道如何使taht函數不會掛起,如果緩衝區中沒有數據就退出?
編輯:我將數據發送到使用的端口:
echo [data] > /dev/ttySV0
我使用socat來創建一個虛擬串口:如何使讀取功能不會掛起?
socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1
的,我用C++編寫的程序,我打開ttySV1接口,即可開始閱讀。
讀取函數是在一段時間,但問題是讀取函數掛起,直到我發送數據到端口。你知道如何使taht函數不會掛起,如果緩衝區中沒有數據就退出?
編輯:我將數據發送到使用的端口:
echo [data] > /dev/ttySV0
根據您正在運行的操作系統,您還可以使用系統讀取功能。 細節應該在人(3)閱讀下。
您將不得不使用fnctl來設置O_NONBLOCK。如果管道/ FIFO當前爲空,這應該會導致讀取失敗。我檢查了Linux的手冊頁,但它們在大多數基於POSIX的系統中應該是類似的行爲。
一種方法是使用select()方法來查看是否有要讀取的數據。 This或谷歌上的其他東西(我搜索「bsd套接字選擇」)應該引導你沿着正確的道路。
可以使用peek函數或多線程。 – JoshD 2010-10-23 00:04:01