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

ИМЯ

       vmsplice - соединяет пользовательские страницы памяти с каналом

LIBRARY

       Standard C library (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 должен
       указывать на канал.

       The pointer iov points to an array of iovec structures as described in 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>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику по его адресу электронной почты или по адресу списка рассылки русских переводчиков.

Linux man-pages 6.8                               2 мая 2024 г.                                      vmsplice(2)