Temelde aşağıdaki kod var:
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;
}
Boyut 1GB ise çalışır, ancak boyut ~ 2GB olduğunda, 4K bayt sürekli olarak kalır. Bunu bir döngüde yazma ve arabelleği yukarı taşıyarak düzeltebilirim, ancak neden her zaman başarısız olduğunu merak ediyorum.
Örneğin, boyut 2147483648 ise, yazma yalnızca 2147479552 yazar ve 4096 yazılmadan kalır. Bu neden olur ve yazma işlemini her zaman bir döngüde sarmak doğru olur?
write
kerede ne kadar veri tüketileceğine ilişkin kurallar , ne tür bir veri havuzunun olduğuna bağlıdır file
(örn. "Normal" dosya, boru, akış soketi, datagram soketi, ...). Daha spesifik olabilir misiniz?
write
tüm dosyayı bir kerede mi deniyorsun ? Her zamanki yaklaşım, siz her şeyi yazana kadar her seferinde arabellek boyutunda veri akışıdır.
write()
hepsini yazmak zorunda değil (küçük tamponlar için de geçerli)
SSIZE_MAX
kısıtlamadan bağımsız olarak bunu yapmanız gerekir . write()
Spec o neredeyse her zaman yapar bile, tam tampon yazmak için yükümlülüğü yoktur diyor. Söz konusu döngü içermeyen kod bir hatadır.