[LUGA] Mit freundlicher Unterstützung von:
init.at

Mail Thread Index


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [luga] EOF bei seriellen Verbindungen



Oooops, hab VMIN=1 uebersehen.

VMIN=1 sollte eigentlich verhindern dass ein read()  0 bytes returniert.
Aber mit VMIN=1 und VTIME=0  kann der read() call indefinitly blockieren (wenn nix auf der seriellen schnittstelle empfangen wird), und der select() call ist eigentlich unnötig. Zumindest für den read() vom tty. KA ob noch andere filedescriptoren mitspielen.

ich persoenlich wuerde VMIN auch auf 0 setzen und wenn der select() call returniert und das tty daten hat, in einer loop read() aufrufen, bis 0 bytes gelesen wurden.
So wie man es auch mit non-blocking sockets macht.

das wuerde auch dein derzeitiges problem loesen. es gibt dann kein EOF mehr.



2017-04-05 14:51 GMT+02:00 Michael Lausch <mick.lausch@gmail.com>:


2017-04-05 12:46 GMT+02:00 Bernd Petrovitsch <bernd@petrovitsch.priv.at>:
Hi!

Es geht wohl nicht weiter, ohne daß ich die Ingrid mach';-)

On Tue, 2017-04-04 at 10:22 +0200, Bernd Petrovitsch wrote:
[...]
> Kann gut sein - muß mal schauen, ob bzw. wie das TTY konfiguriert wird
> (in irgendeinem alten Library-Code;-).

Wird es - termios etc.

> Und das ggfs. reparieren ...
Grmmml, so einfach ist es leider nicht - viel roher geht es nicht,
oder?
----  snip  ----
// raw
term.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL);
term.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
term.c_oflag &= ~OPOST;
term.c_cc[VMIN]  = 1;
term.c_cc[VTIME] = 0;
----  snip  ----

das schaut richtig aus.
"da kommt ein EOF daher" heisst read() returns 0?
select() ist edge triggered.

1) byte arrives->select() returns.
2) read() start execute
3) byte arrives
4) read() returns with 2 bytes.
5) select() returns because of 3
6) read() return with 0 bytes

oder ist die lesende app multithreaded und ein andere thread macht das read()?
epoll() ist level triggered und sollte das problem loesen koennen.

ist das moeglich?
 

MfG,
        Bernd
--
Bernd Petrovitsch                  Email : bernd@petrovitsch.priv.at
                     LUGA : http://www.luga.at




powered by LINUX the choice of a gnu generation
linux user group austria;
Suche
Suche
Letzte Änderung:
webmaster@luga.at
April 2017