Как читать из сокета прямо в файл

В C (или C++) есть способ получать данные из сокета, но вместо того, чтобы читать их в буфер в памяти, он «получает» их в файл. Я знаю, что обычный способ сделать это — получить данные в буфер символов, а затем записать буфер в файл.

Существует ли такая функция, как sendfile(), которая передает данные непосредственно между файлами и сокетами, но вместо отправки данных из файла в сокет она получает данные из сокета в файл?

1 ответ

Нет эквивалента sendfile, который работал бы наоборот. Но есть функция splice() , которая осуществляет передачу между двумя файловыми дескрипторами, один из которых должен ссылаться на файл.

Итак, что вы можете сделать, это сокет -> труба, труба -> файл. Является ли это преимуществом над буфером, вы должны измерить. Сращивание ограничено размером буфера конвейера, в то время как чтение/запись может работать в произвольных единицах, уменьшая количество системных вызовов.

Другие вопросы по тегам