2011-06-23 75 views
0

我有一個程序,將始終運行時,計算機。它通過USB設備與串行接口。有時計算機開啓時設備可能不存在。打開/ dev/ttyUSB *當它出現時

我的問題是確認設備文件何時出現的好方法。假設我知道它的名字會在它得到一個fd時會中斷,我可以做一個連續檢查文件的無限循環。但是有沒有比這更好的方法?

此外,假設設備在程序運行時被拔出,我的fd現在變得無效。發生這種情況時是否發生了一些事件或錯誤,以便我可以再次開始檢查,直到設備文件再次出現?

我使用select循環讀取fd。

回答

0

從歷史上看,輪詢的解決方案(確定所述「文件」是否存在於某個時間間隔的循環)將是「最好」的一個。如果您使用的是現代Linux(2.6.12+,但您沒有指定),則可以使用inotify,這可能正是您想要的 - 監視創建文件的目錄(IN_CREATE)。我鏈接的維基百科文章給出了非常好的概述和有用的鏈接。

它被拔掉的部分是棘手的。當文件在* nix中被刪除時(可以追溯到永遠前面),其文件描述符仍然有效。所以我猜想extern int errno;可能是你的解決方案;你的帖子被標記爲「C」,所以沒有什麼可以「扔」,但如果你在你的read(或其他任何)調用失敗時檢查這個,你可以獲得洞察力。

還檢查libudev,這當然是更多特定於設備,而不是一般的「一切都是文件」的* nix哲學。

2

在Linux上,可以在設備插入或通過使用udev刪除設備時通知您的應用程序。

對於一個很好的例子,來看看這個通知:udev-notify

libudev API將讓您聆聽內核事件和被通知當一個設備可用,或者當它被移除,然後你可以決定做當這種事件發生時。

相關問題