Zdravim vsechny,
nedavno jsem narazil na problem, se kterym jsem se nikdy nesetkal a nevim si s nim rady. Ani po dukladne konzultaci strycka googla nejsem o moc moudrejsi.
Pisu aplikaci, ktera mimo jine generuje a posila nejaka data na seriovy port. Resp. na virtualni seriovy port gadget ethernet - zatizeni /dev/ttyGSx. Pouzivam klasicke termios funkce a neblokuji file descriptory a vse chodi dobe. Az na jeden problem.
Muj program tedy periodicky generuje data a posila je ven. Vzhledem k tomu, ze se jedna o seriovy port (i kdyz virtualni), neni zadna informace, zda si je druhy konec vybira (zarizeni /dev/ttyGSx je vytvoreno vzdycky bez ohledu na to, zda je USB pripojeno a/nebo nakonfigurovano).
Takze po nejake dobe dojde k naplneni interniho fifo. Funkce "write" wrati chybu would block. V poradku. Potiz ale nastane, kdyz chci takovy file descriptor s naplnenym fifem zavrit (funkci close). V tomto okamziku se funkce close zablokuje! Ne do nekonenecna, ale asi tak na 10 sekund (odhad).
Nic jsem k tomuto problemu nenasel, zkousel jsem vystup flushnout pomoci "tcflush(uart->fd, TCIOFLUSH)" a nic. Pokud je naplnene fifo, close se proste zablokuje.
Nesetkal se nekdo s podobnym problemem?
Diky
Masi