Документация по LinuxLinuxDoc.Ru 🔍

sendfile - производит обмен данными между описателями файлов

НАЗВАНИЕ
sendfile - производит обмен данными между описателями
файлов

СИНТАКСИС

#include

ssize_t sendfile(int out_fd, int in_fd, off_t *offset,
size_t count);

ОПИСАНИЕ
Этот вызов производит обмен данными между двумя
описателями. Один или оба описателя могут быть сокетами
(см. ниже). in_fd должен быть открытым для чтения
описателем файла, а out_fd должен быть описателем,
открытым для записи. offset является переменной,
указывающей sendfile() начало необходимых для считывания
данных. После выполнения функции sendfile() эта
переменная указывает на байт, находящийся за последним
считанным байтом. count- это количество байтов,
подлежащих копированию, между двумя описателями файлов.

Потомучто это копирование выполняется без участия ядра,
sendfile() не тратит время на пересылку данных из и в
область пользователя.


ЗАМЕЧАНИЯ

Sendfile не изменяет указатель in_fd, но изменяет
указатель out_fd. Если Вы хотите использовать sendfile
для пересылки файлов в сокет TCP и требуется послать
заголовочные данные в начало содержимого файлов, то
обращайтесь за помощью к опции TCP_CORK в tcp(7) Это
поможет уменьшить количество пакетов и оптимизировать
выполнение функции.

В настоящее время описатель из которого читаются данные,
не может соответствовать сокету, он может соответствовать
файлу, который поддерживает mmap()-подобные операции.


ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Если пересылка прошла успешно, то возвращается значение
out_fd, где указано количество переданных байтов. При
ошибке возвращается -1, а переменной errno присваивается
номер ошибки.

КОДЫ ОШИБОК

EBADF Входной файл не был открыт для чтения или
результирующий файл не был открыт для записи.

EINVAL Неправильный описатель, или нет прав на доступ к
нему.

ENOMEM Не хватает памяти для чтения in_fd.

EIO Неизвестная ошибка при чтении in_fd.

ВЕРСИИ

sendfile впервые включена в Linux 2.2. Файл заголовков
представлен начиная с glibc2.1.

Другие ОС семейства Unix часто используют sendfile с
различным синтаксисом. Эта функция не должна быть
использована в программах, переносимых в другие системы.
Читать новости Linux в Telegram
Linux - sendfile - производит обмен данными между описателями файлов
Мы в соцсетях ✉