Le specifiche POSIX per write()
dice:
Se il valore di nbyte
è maggiore di {} SSIZE_MAX, il risultato è definito dall'implementazione.
Quindi, qualsiasi tentativo di scrivere più di SSIZE_MAX
byte porta a comportamenti che non viene comandato dal POSIX, ma che deve essere documentato dal sistema (è definito dall'implementazione, non indefinito, comportamento). Tuttavia, diversi sistemi possono gestirlo in modo diverso, e non c'è nulla che impedisca a un sistema di riportare un errore (forse EINVAL
impostato su SSIZE_MAX
e scrivere a SSIZE_MAX
byte e segnalarlo, lasciandolo all'applicazione per riprovare sul resto e altro i sistemi potrebbero essere inventivi e fare le cose in modo diverso ancora.
Se si dispone di un sistema a 64 bit, lo SSIZE_MAX
è probabilmente più grande della quantità di spazio su disco nel singolo centro dati più grande del mondo (possibilmente di un ordine di grandezza o più, consentendo anche l'NSA e Google), quindi è improbabile che tu possa imbatterti in problemi reali con questo, ma su sistemi a 32 bit, potresti facilmente avere più di 2 GB di spazio e se ssize_t
è a 32 bit, devi occuparti di tutti Questo. (In Mac OS X 10.10.3, una build a 32 bit ha un valore di 4 byte size_t
e ssize_t
, almeno per impostazione predefinita.)
fonte
2015-04-18 21:55:57
I processi presentano anche dei limiti. Un processo che supera il 'limite di dimensione del file del processo 'non andrà a buon fine (errore' EFBIG'), quindi quel limite potrebbe essere
yeyo
SSIZE_T sta per Signed Size e quindi significa che è un numero firmato. Questo è il caso in cui si è verificato un errore durante la chiamata di sistema di scrittura. Quindi il numero massimo di scritture non può essere più grande firmato Dimensioni_t – madz
pendrive, lo so tanto. Questo non affronta la mia domanda affatto. Il valore restituito è 'ssize_t' che ha un intervallo più limitato rispetto a' size_t' sulla maggior parte dei sistemi, quindi in sostanza sto chiedendo se le scritture sono limitate da 'SSIZE_MAX' o' SIZE_MAX'. –