Я по суті має такий код:
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()
каже, що не потрібно писати повний буфер, навіть якщо це майже завжди є. Код без циклу у питанні - помилка.