Saya pada dasarnya memiliki kode berikut:
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;
}
Ini berfungsi jika ukurannya 1GB, tetapi ketika ukurannya ~ 2GB, ia mendapatkan 4K byte tersisa secara konsisten. Saya dapat memperbaikinya dengan membungkus tulis dalam satu lingkaran dan memindahkan buffer ke atas tapi saya ingin tahu mengapa selalu gagal.
Misalnya jika ukurannya adalah 2147483648, tulis hanya tulislah 2147479552, meninggalkan 4096 tidak tertulis. Mengapa ini terjadi dan apakah benar untuk selalu membungkus tulis dalam satu lingkaran?
write
akan dikonsumsi sekaligus tergantung pada apa jenis wastafel data file
(misalnya file "biasa", pipa, soket aliran, soket datagram, ...). Bisakah Anda lebih spesifik?
write
seluruh file sekaligus? Pendekatan yang biasa dilakukan adalah mengalirkan data dalam ukuran buffer pada satu waktu sampai Anda menulis semuanya.
write()
tidak harus menulis semuanya (yang berlaku untuk buffer kecil juga)
SSIZE_MAX
batasannya. The write()
Spec mengatakan tidak berkewajiban untuk menulis buffer penuh, bahkan jika itu hampir selalu tidak. Kode loop-less dalam pertanyaan adalah bug.