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.
Es gibt 'ETOOSMALL' Fehlercode – fghj
@ user1034749' ETOOSMALL' wurde für NFSv3 erstellt, und die meisten Tools behandeln es als 'Unbekannter Fehler 525'. Vielleicht wäre "EINVAL" besser geeignet? –