2014-11-06 41 views
0

我正在寫一個C程序,它會自動登錄到某些連接的Linux設備(通過串行端口)並讀取其所有日誌文件等。
所以問題來了:我沒有想硬編碼的串行端口(在我的情況是/ dev/ttyS0來)到我的代碼,但給某種提示的開頭,列出所有實際存在設備從中我可以選擇它作爲參數傳遞。
有沒有辦法在/ dev文件夾中區分邏輯設備和物理設備?我不想在/ dev文件夾中使用ls,並顯示所有(在我的情況下)不必要的信息;我只想要顯示實際存在的串行端口。UNIX - 列出所有現有的串行端口

+0

您可能可以在'/ proc'或'/ sys'目錄中找到它。 – 2014-11-06 10:25:18

+0

問題可能是http://stackoverflow.com/a/9914339 – jkalden 2014-11-06 10:41:10

+0

的重複請考慮不限制用戶到列表中的一個端口。對於某些應用程序,讓程序在不是串口的文件上運行可能會很有用。 – fuz 2014-11-06 15:26:49

回答

1

您可以通過讀取目錄/sys/class/tty/中的符號鏈接來枚舉系統中的所有ttys。

然後你可以閱讀type pseudofile來檢查它是一個真正的串口還是虛擬的。可能的值是在<linux/serial.h>

#define PORT_UNKNOWN 0 
#define PORT_8250  1 
#define PORT_16450  2 
#define PORT_16550  3 
#define PORT_16550A  4 
#define PORT_CIRRUS  5  /* usurped by cyclades.c */ 
#define PORT_16650  6 
#define PORT_16650V2 7 
#define PORT_16750  8 
#define PORT_STARTECH 9  /* usurped by cyclades.c */ 
#define PORT_16C950  10  /* Oxford Semiconductor */ 
#define PORT_16654  11 
#define PORT_16850  12 
#define PORT_RSA  13  /* RSA-DV II/S card */ 

大多數虛擬端口甚至不會有type文件。無論如何,0可能意味着虛擬或模擬端口。

+0

感謝您的回答,但我如何閱讀給定端口的僞類型? – Buitenlander 2014-11-06 12:20:42

+0

@Buitenlander您只需打開文件並閱讀它,就像使用普通文件一樣。你甚至可以用'cat'看到內容。 – rodrigo 2014-11-06 13:01:42