Я по суті має такий код:
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;
}
Він працює, якщо розмір становить 1 Гб, але коли розмір становить ~ 2 ГБ, він отримує 4 К байт послідовно. Я можу це виправити, загорнувши запис у цикл і перемістивши буфер, але мені цікаво, чому це завжди не вдається.
Наприклад, якщо розмір 2147483648, пишіть лише 2147479552, залишаючи 4096 неписаними. Чому це станеться і чи правильно завжди обгортати запис у циклі?
writeспоживають даних відразу, залежать від типу раковини даних file(наприклад, "звичайний" файл, труба, сокет потоку, сокет дейтаграми, ...). Чи можете ви бути більш конкретними?
writeвсьому файлу? Звичайний підхід полягає в потоковому передачі даних розміром буфера за один раз, поки ви все не напишете.
write()не потрібно писати все це (що стосується і маленьких буферів)
SSIZE_MAXобмеження. Спеціаліст write()каже, що не потрібно писати повний буфер, навіть якщо це майже завжди є. Код без циклу у питанні - помилка.