Forum: PC-Programmierung Liste verfügbarer COM-Ports (Linux+Win)


von Laura (Gast)


Lesenswert?

Hallo,
kann ich irgendwie aus einem C-Programm heraus eine Liste aller 
verfügbaren COM-Ports bestimmen?

Das ganze sollte sowohl unter Linux 
(/dev/ttyS0...,ttyUSB0...,rfcomm0...) als auch unter Windows 
(COM0..COM20...) funktionieren. Systemunabhängig wäre toll (z.B. mit 
wxWidgets falls das hilft), muß aber nicht sein (dann halt mit bedingter 
Compilierung).

Möglichst mit High-Level-Routinen und ohne Systemcalls (wie "ls 
/dev/ttyS*").

Thx
Laura

von Blackbird (Gast)


Lesenswert?

In Windows kann man auf die Einträge in der registry zurückgreifen. Wenn 
das nicht reicht, kann man auch jeden Port (z.B. 1, 2, 3, ...., 16 oder 
mehr) öffnen und den Errorcode auswerten. Da kann dann zwischen "schon 
geöffnet" oder "nicht vorhanden" unterschieden werden.
Geht auch in Linux. Dort aber nur, wenn das Programm (nicht unbedingt 
auch noch der User) root-Rechte hat.

Blackbird

von Christian R. (supachris)


Lesenswert?

Das Öffnen aller Ports kann zumindest unter Win zu heftigsten Problemen 
führen. Bei mir ist z.b. immer ein über USB und virtuellem COM Port 
verbundener Debugger hoffnungslos abgeschmiert, wenn ich versucht hab, 
seinen Port nochmal zu öffnen.
Lieber die reg auslesen, das funktioniert im Win einwandfrei.

von Feadi (Gast)


Lesenswert?

@ Blackbird

root Berechtigung ist dafür nicht notwendig, dafür gibt es doch die 
Gruppen. 
http://www.mikrocontroller.net/articles/Ports_benutzen_(GCC)#Zugriffsrechte

Gruß, Feadi

von SiO2 (Gast)


Lesenswert?

Unter Linux, zumindest für reine rs232: dmesg | grep tty

von Laura (Gast)


Lesenswert?

Danke, für Windows werde ich den Tip mit der Registry verfolgen.

Bei Linux sehe ich das Problem, dass die Namen der seriellen 
Schnittstellen von System zu System variieren können. Selbst die 
ttyS0...4 heißen nicht immer so. Hilft mir evtl. /proc weiter?

> sudo cat /proc/tty/drivers
/dev/tty             /dev/tty        5       0 system:/dev/tty
/dev/console         /dev/console    5       1 system:console
/dev/ptmx            /dev/ptmx       5       2 system
/dev/vc/0            /dev/vc/0       4       0 system:vtmaster
usbserial            /dev/ttyUSB   188   0-254 serial
serial               /dev/ttyS       4  64-111 serial
pty_slave            /dev/pts      136 0-1048575 pty:slave
pty_master           /dev/ptm      128 0-1048575 pty:master
pty_slave            /dev/ttyp       3   0-255 pty:slave
pty_master           /dev/pty        2   0-255 pty:master
unknown              /dev/tty        4    1-63 console

Kann ich auch ohne root-Rechte an diese Liste kommen? Und welche der 
Schnittstellen muss ich auf Funktion testen? Es gibt >300 /dev/tty*, 
davon 25 /ttyS* und 4 /ttyUSB*.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.