Разница между Linux Linux и системным вызовом sendfile - PullRequest
3 голосов
/ 30 апреля 2010

Я программирую веб-сервер (C), который должен отправлять большие файлы. Мой вопрос: Каковы основные различия в двух системных вызовах: write и sendfile. sendfile зависит от размера системного буфера сокета? Я заметил, что write часто пишет меньше, чем я просил.

Например, если получено много запросов на один файл: я должен открыть его, скопировать в память и использовать write, или, возможно, я могу сделать sendfile для каждого клиента?

Заранее спасибо за все ответы.

1 Ответ

6 голосов
/ 30 апреля 2010

Пожалуйста, прочитайте sendfile (2).

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

Относительно возвращаемого значения любой из вызовов write / read / senfile не гарантирует, что весь блок данных будет записан / прочитан / отправлен

...