Что такое операции Zero-Copy (системный вызов sendfile) и как передать файл в сокет, минуя копирование в пользовательское пространство приложения?

sendfile передаёт данные между файловыми дескрипторами внутри ядра, избегая промежуточного read/write через пользовательский буфер. Это уменьшает копирование и число переходов между приложением и ядром.

Короткий ответ

Что ответить на собеседовании

sendfile передаёт данные между файловыми дескрипторами внутри ядра, избегая промежуточного read/write через пользовательский буфер. Это уменьшает копирование и число переходов между приложением и ядром.

Подробный разбор

Ответ с пояснениями

sendfile передаёт данные между файловыми дескрипторами внутри ядра, избегая промежуточного read/write через пользовательский буфер. Это уменьшает копирование и число переходов между приложением и ядром.

Типичный сценарий — отправка обычного файла в сокет. Вызов может передать меньше запрошенного объёма, поэтому нужно учитывать возвращённое число байтов, ошибки и готовность неблокирующего сокета. «Zero-copy» не означает отсутствие любых перемещений данных в системе. TLS, сжатие и преобразование содержимого могут потребовать другого пути, если соответствующая обработка не поддержана ниже. Высокоуровневые серверы часто используют этот механизм для статических файлов автоматически при подходящих условиях.

Источник: man7.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее