Re: Ansteuerung einer seriellen Schnittstelle

From: Peter Much <pmc(at)citylink.dinoex.sub.org>
Date: Mon, 25 Mar 2002 01:06:49 GMT

<logix(at)foobar.franken.de> aka Harold Gutch schrieb
mit Datum Sun, 24 Mar 2002 15:09:57 +0100 in m2n.de.fbsd.questions:

!> [EINVAL] The pointer associated with d was negative.
!> Nun d ist der Filedescriptor - das hat eindeutig andere Gründe als
!> non-blocking - fcntl verändert ja nicht den descriptor.
!> Vermutlich hast du da einen neuen Fehler reingemacht.
!
!GNA, ja, hab ich - und zwar beim Schreiben der Mail. Der
!read()-Aufruf liefert EAGAIN zurueck, das Verhalten deckt sich
!also fuer mein Verstaendnis genau mit dem im blocking-Fall.

Das ist ja auch richtig. Nonblocking read() findet entweder
bereits ein Zeichen im Device vor, dann bringt er das zurueck,
oder er findet grad keines, dann kommt er auch sofort zurueck,
und zwar mit EAGAIN (dachte immer das hiesse EWOULDBLOCK).
 -> es macht kaum Sinn, nonblocking read() nicht in einer
Schleife aufzurufen - und da diese Schleife netterweise _immer_
vom Interface lesen und den Kram irgendwo zwischenlagern
sollte (auch waehrend dem write()), brauchen wir auch wieder
einen Extra-Thread dafuer, sonst wird es haesslich - hupft
sich also nix. Oder man bringt dem Interface bei, dass es
ordentlich puffert. (Aber hier ist ja nichtmal klar, ob das
ding grad canonical oder noncanonical -d.h. zeilen- oder
zeichen-orientiert- laeuft.)
Dann gibt es ja noch ein huebsches Problem: da die antwort
auf ein Kommando mit der Baudrate reinplaetschert, weisst du
erstmal nicht, wie lange du lesen musst. Der read hat -egal
ob blocking oder nicht- irgendwann zwischendurch genug und
kommt zurueck. So ein Ding sauber zu gestalten ist nicht
ohne - aber eine sehr huebsche Uebung. ;-)))

PMc

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 25 Mar 2002 - 04:54:08 CET

search this site