[LUGA] Mit freundlicher Unterstützung von:
OCG

Mail Thread Index


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

Re: [luga] EOF bei seriellen Verbindungen



Das Ergebnis von fionread() zum Zeitpunkt t0 hat mit der Anzahl der Bytes Um Zeitpunkt t1 nicht unbedingt viel zu tun. 

On Apr 5, 2017 20:39, "Steffen Nurpmeso" <steffen@sdaoden.eu> wrote:
Michael Lausch <mick.lausch@gmail.com> wrote:
  ..
 |So wie man es auch mit non-blocking sockets macht.
 |
 |das wuerde auch dein derzeitiges problem loesen. es gibt dann kein \
 |EOF mehr.

Es gibt oder gab auch noch den FIONREAD ioctl, der die Anzahl an
Bytes in der Queue zurück gibt, sodaß blockierendes I/O
nicht-blockierend machbar ist.  Z. B. ("sir==ssize_t")

  _pub _sta sir POSIX::getBytesAvailable(sir _fd){
          union {sir ret; ui4 x; si32 oserr;} u;
          _Nydin;

  #if(!defined(FIONREAD))
          Errno::set(Errno::enosys);
          u.ret = eof;
  #else
  __JEINTR(1)
          u.x = 0;
          if(::sfos_ioctl(_fd, FIONREAD, r(sir,&u.x)) == -1) {
  #  if(!__SYS_HDL_ERRNO)
                  if((u.oserr = errno) == EINTR)
                          __DJEINTR(1);
                  Errno::setFromOSErrno(u.oserr);
  #  endif
                  u.ret = eof;
          }
          SF_INJ_64( u.ret = s(sir,u.x); )
  #endif

          _Nydout;
          return(u.ret);
  } // getBytesAvailable

--steffen


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