Копирование файла с использованием mmap - PullRequest
0 голосов
/ 26 апреля 2018

Проблема - Передача файла размером 350 МБ из сетевого блока linux 1 в другой сетевой блок linux 2 на лету динамически, когда блок 2 запрашивает его.

Система имеет ограниченную память в 1 ГБ ифайл размером 350 МБ хранится на диске.Система на самом деле занята, делая много других вещей.

Как лучше всего автоматически передать файл на лету по запросу?Если я прочту весь файл с диска и сохраню его в оперативной памяти перед передачей, это фактически займет много памяти.Если я хочу избежать этого, то поможет ли использование mmap для передачи файла?Как бы mmap вписался в этот сценарий?

1 Ответ

0 голосов
/ 26 апреля 2018

В большинстве случаев вы можете (и должны) использовать буферизованную копию в следующих строках:

while (read some data from the input into a buffer) {
    write data from the buffer to the output
}
and you're done

Буфер не обязательно должен быть большим.Что-то порядка 64 КБ должно быть достаточно для большинства ситуаций.

Для отправляющей стороны только , вы можете использовать системный вызов sendfile() как оптимизация.

...