sendfile передаёт данные между файловыми дескрипторами внутри ядра, избегая промежуточного read/write через пользовательский буфер. Это уменьшает копирование и число переходов между приложением и ядром.
Что такое операции Zero-Copy (системный вызов sendfile) и как передать файл в сокет, минуя копирование в пользовательское пространство приложения?
sendfile передаёт данные между файловыми дескрипторами внутри ядра, избегая промежуточного read/write через пользовательский буфер. Это уменьшает копирование и число переходов между приложением и ядром.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
sendfile передаёт данные между файловыми дескрипторами внутри ядра, избегая промежуточного read/write через пользовательский буфер. Это уменьшает копирование и число переходов между приложением и ядром.
Типичный сценарий — отправка обычного файла в сокет. Вызов может передать меньше запрошенного объёма, поэтому нужно учитывать возвращённое число байтов, ошибки и готовность неблокирующего сокета. «Zero-copy» не означает отсутствие любых перемещений данных в системе. TLS, сжатие и преобразование содержимого могут потребовать другого пути, если соответствующая обработка не поддержана ниже. Высокоуровневые серверы часто используют этот механизм для статических файлов автоматически при подходящих условиях.
Источник: man7.org.