Provided by: manpages-ru-dev_4.27.0-1_all 

НАИМЕНОВАНИЕ
vmsplice - соединяет пользовательские страницы памяти с каналом
БИБЛИОТЕКА
Стандартная библиотека языка C (libc, -lc)
ОБЗОР
#define _GNU_SOURCE /* см. feature_test_macros(7) */
#include <fcntl.h>
ssize_t vmsplice(int fd, const struct iovec *iov,
size_t nr_segs, unsigned int flags);
ОПИСАНИЕ
Если fd открыт для записи, то системный вызов vmsplice() отображает nr_segs областей пользовательской
памяти, описанных iov, в канал. Если fd открыт для чтения, то системный вызов vmsplice() заполняет
nr_segs областей пользовательской памяти, описанных iov, из канала. Файловый дескриптор fd должен
указывать на канал.
Указатель iov указывает на массив структур iovec, как описано в iovec(3type).
Аргумент flags представляет собой битовую маску, которая составляется логическим сложением (OR) следующих
значений:
SPLICE_F_MOVE
Не используется в vmsplice(); см. splice(2).
SPLICE_F_NONBLOCK
Не блокировать ввод-вывод; подробности в splice(2).
SPLICE_F_MORE
В данный момент никак не влияет при указании в vmsplice(), но это может измениться; см. splice(2).
SPLICE_F_GIFT
Предоставить ядру пользовательские страницы. Приложение, возможно, не изменяло эту память, иначе
страничный кэш и данные на диске будут различны. Передача страниц ядру означает, что последующий
вызов splice(2) с флагом SPLICE_F_MOVE сможет переместить страницы; если этот флаг не указан, то
последующий splice(2) с флагом SPLICE_F_MOVE должен скопировать страницы. Также, данные должны
быть выровнены по странице: по адресам памяти и размеру.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении vmsplice() возвращается количество байт, переданных в канал. При ошибке
vmsplice() возвращает -1, а errno устанавливается в соответствующее значение.
ОШИБКИ
EAGAIN В указан flags SPLICE_F_NONBLOCK, и операция вызвала бы блокировку.
EBADF Неправильное значение fd или оно не указывает на канал.
EINVAL Значение nr_segs больше IOV_MAX; или, если задан SPLICE_F_GIFT, не выровнена память.
ENOMEM Не хватает памяти.
СТАНДАРТЫ
Linux.
ИСТОРИЯ
Linux 2.6.17, glibc 2.5.
ПРИМЕЧАНИЯ
Вызов vmsplice() следует другим функциям векторизованного чтения/записи при возникновении ограничений на
количество передаваемых сегментов. Это ограничение равно IOV_MAX, определяемое в <limits.h>. Сейчас это
значение равно 1024.
Настоящую стыковку vmsplice() поддерживает только для отображения пользовательской памяти в канал. В
обратном направлении, в действительности, он просто копирует данные в пользовательское пространство. Но
это делает интерфейс приятным и симметричным, и позволяет людям строить на vmsplice() с пространством
будущего улучшения производительности.
СМОТРИТЕ ТАКЖЕ
splice(2), tee(2), pipe(7)
ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>,
Dmitriy Ovchinnikov <dmitriyxt5@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Katrin Kutepova
<blackkatelv@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill
Rekhov <krekhov.dev@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной
лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских
переводчиков.
Справочные страницы Linux 6.9.1 2 мая 2024 г. vmsplice(2)