Die Daten gingen buchstäblich ins Leere. Niemand hat darauf gewartet, also wurde es verworfen. Die genaue Mechanik hängt von der Hardware ab. Normalerweise werden jedoch beim ersten Öffnen eines Geräts alle Empfangspuffer in der Hardware gelöscht. Es kann jedoch nicht garantiert werden, dass die Puffer überhaupt aktiviert sind.
Werden Geräte-E / A auch dann gehandhabt, wenn ein Gerät von keinem Prozess geöffnet wird?
296
Julio Guerra
Die folgenden Shell-Programmbeispiele machen die Frage klarer.
Bei einem einfachen Zeichengerät (ein ftdi ttyUSB Gerät in meinem Fall), schicke ich es eine Anfrage mit echo
an open();write();close();
das Gerät, dann lesen Sie die Antwort mit cat
auf open();read();close();
das Gerät, mit zwei unterschiedlichen Verfahren ( /bin/echo
und /bin/cat
).
- Die folgenden Arbeiten:
$ /bin/echo -ne $request > /dev/ttyUSB0 ; /bin/cat -e < /dev/ttyUSB0 M-^?^B^@^C
- Folgendes funktioniert nicht:
$ /bin/echo -ne $request > /dev/ttyUSB0 ; sleep 2s ; /bin/cat -e < /dev/ttyUSB0 cat does not read anything
- Ein weiteres Arbeitsbeispiel:
$ /bin/cat -e < /dev/ttyUSB0 & sleep 2s ; /bin/echo -ne $request > /dev/ttyUSB0 M-^?^B^@^C
Was passiert in 2
? Warum ist das Verhalten anders? Wohin sind die Daten gegangen?
Ihre Wahl der Verwendung eines Endgeräts (z. B. / dev / tty *) macht die Antwort komplizierter, da der Eingang des Terminals mehrmals gepuffert und stark verarbeitet wird (z. B. Leitungsdisziplin). Übrigens: Sie haben nicht angegeben, ob Sie einen Loopback-Jumper installiert haben. Die "Eingabe", die Sie "lesen", ist vermutlich ein vom Terminal-Subsystem erzeugtes lokales Echo (dh die Ausgabe wird nicht von der seriellen Schnittstelle empfangen).
sawdust vor 8 Jahren
0
Die tty ist in meinem Fall auf nicht kanonisch eingestellt. Also kein Echo, keine Pufferung und keine Zeilenbearbeitung.
Julio Guerra vor 8 Jahren
0
* "Das tty ist in meinem Fall auf nicht kanonischen Modus eingestellt. Also kein Echo." * - Die nicht kanonische Eingabe- und Ausgabeverarbeitung ist unabhängig von den Echoeinstellungen. * "... no buffering ..." * - Wenn Sie den Kernel-Treibercode tatsächlich studiert haben, werden Sie feststellen, dass dies eine lächerliche Behauptung ist.
sawdust vor 8 Jahren
0
1 Antwort auf die Frage
1
David Schwartz
Wie erklären Sie sich dann "1."? Die Reihenfolge der Syscalls ist dieselbe, aber ohne zu schlafen.
Julio Guerra vor 8 Jahren
0
In Fall 1 wurden die Daten von der Hardware empfangen, nachdem das Gerät zum zweiten Mal geöffnet wurde.
David Schwartz vor 8 Jahren
0
Es ist sinnvoll, da mein Gerät viel langsamer ist als die CPU. Gibt POSIX an, wie der Status der Gerätetransfers beim Öffnen aussehen soll? Ich versuche, laufende Anfragen von getöteten Prozessen (dh das Gerät antwortet) loszuwerden. Der Kernel empfängt auch dann noch Daten, wenn das Gerät geleert wird und dann Kernel-Fifos, was bedeutet, dass die Daten bereits vom Gerät gesendet werden und sich irgendwo im E / A-Baum befinden (USB-Gerät -> USB-Host -> PCI) ...). Ich bin schockiert, wie schwer es ist, eine Lösung für diesen sehr einfachen und gewöhnlichen Fall zu finden: Wie erhält man einen sauberen RX / TX-Gesamtzustand, sowohl SW als auch HW ...
Julio Guerra vor 8 Jahren
0
Es ist sehr geräte- und protokollspezifisch. Wenn das Protokoll über eine Art Ping-Signal verfügt, das Sie senden können, können Sie auf eine Antwort warten und dann beide Enden synchron betrachten. Wenn nicht, können Sie eine Reihe von Dingen senden, die eine Antwort erhalten. Die Protokolldokumente sollten angeben, wie die Synchronisierung hergestellt wird.
David Schwartz vor 8 Jahren
0
Verwandte Probleme
-
9
Was ist der Unterschied zwischen den Befehlen "su -s" und "sudo -s"?
-
4
Gutes freies Ubuntu Server-VMWare-Image benötigt
-
4
Was sind die Unterschiede zwischen den großen Linux-Distributionen? Werde ich es merken
-
2
Begrenzung der CPU-Auslastung für Flash in Firefox?
-
2
Wie kann ich mein Mikrofon unter Debian GNOME zum Laufen bringen?
-
2
Conky-Setups - Beispiele / Ideen?
-
3
Was sind die Unterschiede zwischen Linux Window Managern?
-
2
ThunderBird / Lichtsynchronisation mit SE k770i
-
4
Linux-Dateisystem
-
6
Vollbild-Flash langsam in KDE 4