Wie können Sie einen Schreibvorgang mit einem Dateideskriptor löschen?

Es stellt sich heraus, das ganze Missverständnis der open() und fopen (), stammt aus einem buggy I2C-Treiber im Linux-2.6.14-kernel auf einem ARM. Zurückportieren eine funktionierende bit eingeschlagen Treiber gelöst die Ursache des Problems habe ich versucht-Adresse hier ein.

Ich versuche, herauszufinden, ein Problem mit einem seriellen Gerät-Treiber in Linux (I2C). Es scheint, dass durch das hinzufügen von zeitgesteuerten OS Pausen (schläft) zwischen den schreib-und Lesevorgängen auf dem Gerät Dinge funktionieren ... (viel) besser.

Beiseite: Die Natur von I2C ist, dass jedes byte gelesen oder geschrieben durch die Meister bestätigt, indem das Gerät am anderen Ende der wire (slave) - die Pausen, die Verbesserung der Dinge, die mich ermutigen, zu denken, die Fahrer arbeiten asynchron - etwas, dass ich nicht abstimmen kann, wie der bus funktioniert. Anyhoo ...

Ich würde entweder gerne flush das schreiben, um sicher zu sein (anstatt mit fester Dauer pause), oder irgendwie testen, dass der schreib/lese-Transaktion hat abgeschlossen in einem multi-threaded-freundliche Art und Weise.

Das Problem mit fflush(fd); ist, dass es erfordert 'fd' stream-Zeiger (kein file-Deskriptor), d.h.

FILE * fd = fopen("filename","r+");
... //do read and writes
fflush(fd);

Mein problem ist, dass ich verlange, dass die Nutzung der ioctl()die nicht mit einem stream-Zeiger. also

int fd = open("filename",O_RDWR);
ioctl(fd,...);

Vorschläge?

InformationsquelleAutor der Frage Jamie | 2008-11-03

Schreibe einen Kommentar