2010-10-23 49 views
1

我使用socat來創建一個虛擬串口:如何使讀取功能不會掛起?

socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1 

的,我用C++編寫的程序,我打開ttySV1接口,即可開始閱讀。

讀取函數是在一段時間,但問題是讀取函數掛起,直到我發送數據到端口。你知道如何使taht函數不會掛起,如果緩衝區中沒有數據就退出?

編輯:我將數據發送到使用的端口:

echo [data] > /dev/ttySV0 
+1

可以使用peek函數或多線程。 – JoshD 2010-10-23 00:04:01

回答

2

根據您正在運行的操作系統,您還可以使用系統讀取功能。 細節應該在人(3)閱讀下。

您將不得不使用fnctl來設置O_NONBLOCK。如果管道/ FIFO當前爲空,這應該會導致讀取失敗。我檢查了Linux的手冊頁,但它們在大多數基於POSIX的系統中應該是類似的行爲。

+0

太棒了!我正在使用那個閱讀功能(我的操作系統是Arch Linux)。不同之處在於O_NONBLOCK選項丟失。現在我把它和它的魅力工作。謝謝! – Tomas 2010-10-23 02:23:00

+0

很高興工作。我喜歡處理系統API及其隱藏的選項和控制:) – CtRanger 2010-10-23 02:40:42

1

一種方法是使用select()方法來查看是否有要讀取的數據。 This或谷歌上的其他東西(我搜索「bsd套接字選擇」)應該引導你沿着正確的道路。