mikrocontroller.net

Forum: PC Hard- und Software Leseende auf einer tty veranlassen


Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ein µC sendet über die serielle Schnittstelle (ttyS0) Daten an meinen 
Computer. Diese werden mittels
cat /dev/ttyS0 > datei 
umgeleitet. Nun muss ich abschätzen, wann die Übertragung zu Ende ist 
und dann ^C drücken. Wie kann ich dem Terminal sagen, dass es das Lesen 
beenden soll? Ein senden von 0x03 (^C) und 0x04 (^D) brachte schonmal 
nichts. Habt ihr sonst eine Idee, wich ich das Terminal dazu überzeugen 
kann die tty zu schließen?

Mfg Lukas

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun, was ist "das Terminal" und was steht in dessen Dokumentation?

Schon mal ^Z ausprobiert?

Autor: Andreas Ferber (aferber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sende mal zwei ^D direkt hintereinander. Wenn das tty-Device im 
Canonical-Mode ist ("stty -F /dev/ttyS0 -a" enthält "icanon" ohne ein 
"-" davor, ansonsten mit "stty -F /dev/ttyS0 sane" die 
Terminal-Einstellungen zurücksetzen), dann sollte das zu einem EOF und 
Beendigung des cat führen.

Der Hintergrund ist der, dass das EOF-Zeichen (^D) eigentlich nicht 
wirklich EOF bedeutet. Stattdessen wird der aktuelle Zeilenpuffer des 
Terminals an die lesende Anwendung gesendet. Enthält der Puffer keine 
Zeichen mehr (was direkt nach einem Newline oder eben einem EOF-Zeichen 
der Fall ist), dann werden exakt 0 Zeichen an die Anwendung geliefert, 
was dann eben EOF signalisiert.

Beobachten kannst du das auch, wenn du einfach so ein "cat >/dev/null" 
machst, also mit deinem lokalen Terminal (z.B. xterm oder so). Drückst 
du ^D, bevor du irgendetwas anderes eingegeben hast, wird das cat sofort 
beendet. Gibst du aber zunächst ein paar Zeichen ein, ohne Enter zu 
drücken, dann braucht es zwei ^D, um das cat zu beenden.

Das erste ^D taucht dabei übrigens trotzdem nicht im Datenstrom auf, du 
musst das also auch nicht aus dem generierten Output entfernen.

Andreas

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> Nun, was ist "das Terminal" und was steht in dessen Dokumentation?
Der Terminalemulator meiner Desktopumgebung, keine Ahnung was für ein 
Terminal (VT100, etc) der emuliert.
> Schon mal ^Z ausprobiert?
geht nicht

Andreas Ferber schrieb:
> stty -F /dev/ttyS0 sane
Treffer, geht auch mit einem ^D; danke für den ausführlichen Beitrag

Autor: Andreas Ferber (aferber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Luk4s K. schrieb:
> geht auch mit einem ^D

Dann schliessen deine Daten mit einem Newline ab. Würden sie das nicht 
tun, wäre das zweite ^D nötig.

Andreas

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.