У меня есть по существу следующий код:
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()
говорит, что не обязана писать полный буфер, даже если это почти всегда так. Код без петель в вопросе является ошибкой.