Was genau sind Elemente im Verzeichnis / dev?

8

Ich habe eine Anwendung in C ++ geschrieben, die Funknachrichten sendet, indem sie an ein Modem schreibt, das an die serielle Schnittstelle angeschlossen ist. Dazu benötige ich einen Dateideskriptor mit dem Code des Formulars

fd1=open(“/dev/ttyS0″, O_RDWR | O_NOCTTY | O_NDELAY);

Dies machte mich neugierig auf die Art der Elemente in / dev. Um eine Vorstellung vom Inhalt dieser Elemente zu bekommen, habe ich versucht, a

sudo cat /dev/ttyS0

nur um die Nachricht zu bekommen

cat: /dev/ttyS0: Input/output error

Das hat meinem Verständnis überhaupt nicht geholfen. Handelt es sich bei diesen Elementen tatsächlich um eine Datei oder nur um eine Art Link, der den Zugriff auf die Treiberfunktion ermöglicht?

Mathematiker 1975
quelle

Antworten:

8

Alles unter Linux ist eine Datei oder ein Verzeichnis. Dinge in /devsind spezielle Dateien.

Die meisten Geräte sind entweder Block- oder Zeichengeräte. Es gibt jedoch andere Arten von Geräten, die erstellt werden können. Im Allgemeinen sind "Blockgeräte" Geräte, die Daten speichern oder speichern. "Zeichengeräte" können als Geräte betrachtet werden, die Daten übertragen oder übertragen. Beispielsweise sind Diskettenlaufwerke, Festplatten und CD-ROM-Laufwerke Blockgeräte, während serielle Anschlüsse, Mäuse und parallele Druckeranschlüsse Zeichengeräte sind. Es gibt eine Art Namensschema, aber in den allermeisten Fällen sind diese völlig unlogisch.

Geräte werden nach Typ definiert, z. B. "Block" oder "Zeichen" sowie "Haupt" - und "Neben" -Nummer. Die Hauptnummer wird zum Kategorisieren eines Geräts verwendet, und die Nebennummer wird zum Identifizieren eines bestimmten Gerätetyps verwendet. Beispielsweise haben alle an den primären Controller angeschlossenen IDE-Geräte eine große Anzahl von 3. Master- und Slave-Geräte sowie einzelne Partitionen werden durch die Verwendung kleinerer Nummern weiter definiert.

Entnommen aus der Linux-Dateisystem-Hierarchie


2 Optionen:

  1. Versuchen

     cat < /dev/ttyS0
    

    und sehen, ob das funktioniert.

  2. Sie können diesen Fehler beheben, indem Sie Ihren Benutzer derselben Gruppe hinzufügen (z. B. dialout).

Rinzwind
quelle
"Zeichengeräte" können als Geräte betrachtet werden, die Daten übertragen oder übertragen. Und deshalb erhalten Sie Folgendes: crw-rw ---- 1 root dialout 4, 64 Feb 2 15:34 ttyS0 Ich gehe davon aus, dass sich "c" auf Zeichen bezieht.
John Merlino
2

Aus dem Linux-Dokumentationsprojekt :

Der Computer betrachtet jede serielle Schnittstelle als "Gerät". Es wird manchmal als Endgerät bezeichnet, da zu einer Zeit Terminals die häufigste Verwendung für eine serielle Schnittstelle waren. Für jede solche serielle Schnittstelle befindet sich eine spezielle Datei im Verzeichnis / dev (Gerät). / dev / ttyS0) ist die spezielle Datei für die serielle Schnittstelle COM1 in der DOS / Windows-Welt.

Um Text an ein Terminal zu senden, können Sie die Standardausgabe eines Befehlszeilenbefehls in die entsprechende Spezialdatei umleiten. Wenn Sie beispielsweise an der Eingabeaufforderung "echo test> / dev / ttyS1" eingeben, wird das Wort "test" an das Terminal von ttyS1 (COM2) gesendet, sofern Sie über Schreibberechtigung für / dev / ttyS1 verfügen. Wenn Sie "cat my_file> / dev / ttyS0" eingeben, wird der Inhalt der Datei my_file an COM1 (ttyS0) gesendet.

SirCharlo
quelle