Ho essenzialmente il seguente codice:
int fileWrite(int file, void * pBuffer, size_t size)
{
size_t bytesWritten = (size_t)write( file, pBuffer, size ) ;
if (bytesWritten != size)
{
return -1;
}
return 0;
}
Funziona se la dimensione è di 1 GB, ma quando la dimensione è di ~ 2 GB, vengono lasciati costantemente 4K byte. Posso risolvere questo problema avvolgendo la scrittura in un ciclo e spostando il buffer verso l'alto, ma sono curioso di sapere perché fallisce sempre.
Ad esempio, se la dimensione è 2147483648, scrivi scrive solo 2147479552, lasciando 4096 non scritto. Perché dovrebbe succedere ed è corretto avvolgere sempre la scrittura in un ciclo?
write
consumeranno contemporaneamente dipendono dal tipo di sink di dati file
(ad es. File "normale", pipe, stream stream, datagram socket, ...). Può essere più preciso?
write
tutto il file in una volta? L'approccio usuale è quello di eseguire lo streaming dei dati di dimensioni buffer alla volta fino a quando non si scrive tutto.
write()
non è necessario scriverli tutti (che vale anche per piccoli buffer)
SSIZE_MAX
restrizione. Le write()
specifiche dicono che non è obbligatorio scrivere l'intero buffer, anche se quasi sempre. Il codice senza loop nella domanda è un bug.