Die POSIX-Spezifikation für write()
sagt:
Wenn der Wert von nbyte
größer als {SSIZE_MAX}, das Ergebnis Implementierung definiert ist.
Also jeder Versuch, mehr als SSIZE_MAX
Bytes zu schreiben, um Verhalten führt, die nicht von POSIX vorgeschrieben ist, aber das muss vom System dokumentiert werden (es ist die Implementierung definiert, nicht undefiniert, Verhalten). Verschiedene Systeme können jedoch anders damit umgehen, und es gibt nichts zu stoppen ein System einen Fehler melden (vielleicht auf EINVAL
gesetzt) und eine andere schreiben SSIZE_MAX
Bytes und Berichterstattung, so dass es an die Anwendung erneut auf den Rest versuchen, und andere Systeme könnten erfinderisch sein und die Dinge noch anders machen.
Wenn Sie ein 64-Bit-System haben, ist SSIZE_MAX
wahrscheinlich größer als die Menge an Speicherplatz im größten einzelnen Datenzentrum der Welt (möglicherweise um eine Größenordnung oder mehr, sogar unter Berücksichtigung der NSA und Google), so dass Sie wahrscheinlich keine echten Probleme damit haben werden, aber auf 32-Bit-Systemen könnten Sie leicht mehr als 2 GiB Speicherplatz haben und wenn ssize_t
32-Bit ist, müssen Sie mit allen umgehen Dies. (Unter Mac OS X 10.10.3 hat ein 32-Bit-Build mindestens standardmäßig 4 Byte size_t
und ssize_t
.)
Prozesse haben auch Grenzen. Ein Prozess, der die Dateigrößenbeschränkung des Prozesses überschreitet, wird fehlschlagen (Fehler "EFBIG"), daher kann dieses Limit
yeyo
SSIZE_T steht für Signed Size und bedeutet somit eine signierte Nummer. Dies ist der Fall, wenn während des Systemaufrufs ein Fehler aufgetreten ist. Also die maximale Anzahl der Schreibvorgänge kann nicht größer signiert werden Size_t – madz
Pendrive, ich weiß so viel. Das geht meine Frage überhaupt nicht an. Der Rückgabewert ist 'ssize_t', der auf den meisten Systemen einen begrenzteren Bereich als' size_t' hat, also frage ich im Wesentlichen, ob die Schreiboperationen durch 'SSIZE_MAX' oder' SIZE_MAX' begrenzt sind. –