Provided by: manpages-ru-dev_4.18.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 Не хватает памяти.

ВЕРСИИ

       The  vmsplice()   system call first appeared in Linux 2.6.17; library support was added in
       glibc 2.5.

СТАНДАРТЫ

       Данный вызов есть только в Linux.

ЗАМЕЧАНИЯ

       Вызов 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 версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.