sendfile () не работает для копирования обычного текстового файла - PullRequest
0 голосов
/ 23 марта 2011

Проблема с sendfile в том, что он не может скопировать два текстовых файла, используя файл fds. Ошибка EINVAL. // Дескриптор недопустим или заблокирован, или операция типа mmap () недоступна для in_fd.

Что это на самом деле означает?

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

В настоящее время (Linux 2.6.9): in_fd должен соответствовать файлу, который поддерживает операции, подобные mmap () (то есть он не может быть сокетом); а также out_fd должен ссылаться на сокет.

   Applications may wish to fall back to read(2)/write(2) in the case where sendfile() fails with EINVAL or ENOSYS.

1 Ответ

1 голос
/ 23 марта 2011

Идея sendfile() заключается в быстрой отправке файла через сокет (например, веб-серверы). Обычные файлы могут быть mmap() отредактированы, но не являются сокетами, поэтому они взрываются при передаче обычного файла в качестве места назначения.

...