2017-12-31 16 views
0

Situation: In POSIX-Umgebung, verwende ich eine serielle Schnittstelle Bibliothek, die ein Gerät über open(...) mit dem O_NONBLOCK-Flag öffnet. Wie die Manpage für den open Aufruf angibt, blockiert die open selbst nicht mit diesem Flag.Überprüfen Sie, ob Dateideskriptor mit O_NONBLOCK geöffnet ist bereit

Problem: Ich muss die Eingangspuffer der seriellen Schnittstelle löschen, gleich nachdem ich den Port geöffnet habe. Trotzdem ist die serielle Schnittstelle zu diesem Zeitpunkt möglicherweise noch nicht fertig. Ich führe den Löschvorgang durch (die Dateiöffnung ist noch nicht beendet).

Frage: Gibt es eine Möglichkeit, einen nicht blockierenden Dateideskriptor zu blockieren, bevor er in POSIX fertig ist?

Vielen Dank!

+0

Sind Sie sicher, dass Sie verstehen, was * „serielle Schnittstelle nicht bereit sein könnte“ * bedeutet, dh, trifft das wirklich auf Ihre Situation zu? Vielleicht ist die einfache Lösung, blockierende E/A zu verwenden, indem ein 'fcntl (fd, F_SETFL, 0)' nach dem ** open() ** mit dem O_NONBLOCK-Flag ausgegeben wird. * "Die Dateiöffnung ist noch nicht beendet" * - Das ist eine unsinnige Aussage; wenn der syscall zurückkehrt, ist der Port offen. Ist das ein hypothetisches oder ein echtes Problem? Wo ist der Code, der dieses * "Problem" * demonstriert? – sawdust

Antwort

0

Sie können eine der folgenden System verwenden, fordert die Dateideskriptor warten Sie mit offenen bekam macht sich bereit: wählen Umfrage epoll

Verwandte Themen