最近我發現了一個對我來說很新的問題,我會很感激的建議。我使用termios函數在Linux上進行串行通信。我其實並沒有使用真正的串口,而是虛擬的小工具串口驅動程序/dev/ttyGS0
。文件描述符被打開爲非阻塞。在linux中的串行端口描述符塊'close'功能
我的程序定期生成數據併發送到/ dev/ttyGS0。如果另一端讀取或不讀取信息,則不會有任何信息。如果沒有,一些內部FIFO會填滿並寫回「會阻塞」錯誤。到目前爲止,我沒有任何問題。
問題是,當我想關閉帶有填充FIFO的文件描述符時,關閉函數塊!不是無限期的,但約10秒鐘。
我試圖做tcflush(uart->fd, TCOFLUSH)
之前關閉沒有任何影響。
這對我來說是非常奇怪的行爲,我發現沒有描述,關閉可能會阻止。有什麼辦法可以避免這種情況?或者至少減少這個超時?我應該在哪裏尋找這個超時? VTIME屬性對此也沒有影響。
close()映射到可能發生延遲的設備驅動程序中的調用。如果你有驅動程序的源代碼,你可以修改它的行爲。還要查找該設備支持的任何自定義ioctl()調用,以允許修改該行爲。 –
對於我來說,關閉具有數據的close()會阻塞 - 我認爲非阻塞IO的POSIX語義也不會延伸到close()。我希望在'close()'之後,設備將處於開始準備好再次打開()的狀態。由於這是通過USB的虛擬串口,我會開始懷疑終端的無序拆卸,並且10是超時。 – marko