2016-06-09 7 views
4

Ich erstelle einen Linux-Gerätetreiber, der ein Zeichengerät erstellt. Die Daten, die bei Lesevorgängen zurückgegeben werden, sind logisch in 16-Byte-Einheiten unterteilt.Linux-Zeichengerät - was ist zu tun, wenn der Lesepuffer zu klein ist?

Ich plante die Implementierung dieser Division durch die Rückgabe aber viele Einheiten passen in den Lesepuffer, aber ich bin mir nicht sicher, was zu tun ist, wenn der Lesepuffer zu klein ist (< 16 Bytes).

Was soll ich hier tun? Oder gibt es einen besseren Weg, die Sparte zu erreichen, die ich darzustellen versuche?

+3

Es gibt 'ETOOSMALL' Fehlercode – fghj

+0

@ user1034749' ETOOSMALL' wurde für NFSv3 erstellt, und die meisten Tools behandeln es als 'Unbekannter Fehler 525'. Vielleicht wäre "EINVAL" besser geeignet? –

Antwort

5

Sie könnten wie der Datagramm-Socket-Gerätetreiber fungieren: Es gibt immer nur ein einzelnes Datagramm zurück. Wenn der Lesepuffer kleiner ist, wird der Überschuss verworfen. Es liegt in der Verantwortung des Anrufers, genügend Platz für ein ganzes Datagramm bereitzustellen (normalerweise legt das Anwendungsprotokoll die maximale Datagrammgröße fest).

Die Dokumentation Ihres Geräts sollte angeben, dass es in 16-Byte-Einheiten funktioniert. Es gibt also keinen Grund, warum ein Aufrufer einen kleineren Puffer bereitstellen möchte. Daher können alle verlorenen Daten aufgrund des obigen Verwerfens als Fehler in der aufrufenden Anwendung betrachtet werden.

Es wäre jedoch auch sinnvoll, mehr als 16 auf einmal zurückzugeben, wenn der Anrufer danach fragt - dies deutet darauf hin, dass die Anwendung es in Einheiten aufteilen wird. Dies könnte mehr Leistung sein, da es Systemaufrufe minimiert. Wenn der Puffer jedoch kein Vielfaches von 16 ist, können Sie den Rest der letzten Einheit verwerfen. Stellen Sie sicher, dass dies dokumentiert ist, damit sie es zu einem Multiple machen.

Wenn Sie über generische Anwendungen wie cat besorgt sind, glaube ich nicht, dass Sie müssen. Ich würde erwarten, dass sie aus Gründen der Performance sehr große Eingabepuffer verwenden.

+1

Könnte dies negative Auswirkungen auf die Leistung haben, verglichen mit dem Füllen des Puffers so viel wie möglich? –

+0

Möglicherweise. Da Ihre Nachrichten eine feste Größe haben, könnten Sie so viele Daten wie möglich zurückgeben und es der Anwendung erlauben, sie in Einheiten aufzuteilen. – Barmar

Verwandte Themen