mikrocontroller.net

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


Autor: Laura (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Blackbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Feadi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Blackbird

root Berechtigung ist dafür nicht notwendig, dafür gibt es doch die 
Gruppen. 
http://www.mikrocontroller.net/articles/Ports_benu...

Gruß, Feadi

Autor: SiO2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unter Linux, zumindest für reine rs232: dmesg | grep tty

Autor: Laura (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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*.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.