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

НАИМЕНОВАНИЕ

       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)