Provided by: manpages-pl-dev_4.28.0-2_all 

NAZWA
vmsplice - przenosi strony użytkownika do/z potoku
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
SKŁADNIA
#define _GNU_SOURCE /* Patrz feature_test_macros(7) */
#include <fcntl.h>
ssize_t vmsplice(int fd, const struct iovec *iov,
size_t nr_segs, unsigned int flags);
OPIS
Jeśli fd jest otwarty do zapisu, wywołanie systemowe vmsplice() przypisuje przedziały nr_segs pamięci
użytkownika opisane przez iov do potoku. Jeśli fd jest otwarty do odczytu, wywołanie systemowe vmsplice()
wypełnia przedziały nr_segs pamięci użytkownika opisane przez iov z potoku. Deskryptor pliku fd musi
odnosić się do potoku.
Wskaźnik iov prowadzi do struktury iovec, opisanej w iovec(3type).
Argument flags jest maską bitową tworzoną jako suma logiczna (OR) zera lub większej liczby następujących
wartości:
SPLICE_F_MOVE
Nieużywane w vmsplice(); zob. splice(2).
SPLICE_F_NONBLOCK
Nie blokuje wejścia/wyjścia; więcej informacji w podręczniku splice(2).
SPLICE_F_MORE
Obecnie nie wpływa na vmsplice(), lecz może być zaimplementowane w przyszłości; zob. splice(2).
SPLICE_F_GIFT
Strony użytkownika są darowane jądru. Aplikacja nigdy nie może modyfikować tej pamięci, w
przeciwnym przypadku bufor strony i dane na dysku mogą się różnić. Darowanie stron jądru oznacza,
że kolejne wywołanie splice(2) ze znacznikiem SPLICE_F_MOVE może pomyślnie przesunąć strony; jeśli
nie poda się niniejszego znacznika, to kolejne splice(2) z SPLICE_F_MOVE musi skopiować strony.
Dane muszą być poprawnie wyrównane, zarówno w pamięci jak i co do długości.
WARTOŚĆ ZWRACANA
Po pomyślnym zakończeniu vmsplice() zwraca liczbę bajtów przeniesionych do potoku. W przypadku błędu,
vmsplice() zwraca -1 i ustawia errno, wskazując błąd.
BŁĘDY
EAGAIN We flags podano SPLICE_F_NONBLOCK, a operacja spowodowałaby blokowanie.
EBADF fd jest nieprawidłowy albo nie odnosi się do potoku.
EINVAL nr_segs jest większy niż IOV_MAX; albo nie wyrównano pamięci, jeśli ustawiono SPLICE_F_GIFT.
ENOMEM Brak pamięci.
STANDARDY
Linux.
HISTORIA
Linux 2.6.17, glibc 2.5.
UWAGI
vmsplice() jest objęty ograniczeniami liczby przekazywanych segmentów, jakie obowiązują inne
zwektoryzowane funkcje odczytu/zapisu. Limit ten wynosi IOV_MAX i jest zdefiniowany w <limits.h>. Obecnie
wynosi 1024.
vmsplice() tak naprawdę obsługuje prawdziwą operację splice tylko w kierunku od pamięci użytkownika do
potoku. W przeciwnym kierunku faktycznie ma miejsce po prostu kopiowanie danych do przestrzeni
użytkownika. Jednak dzięki temu interfejs jest symetryczny i pozwala na korzystanie z vmsplice() z
możliwością poprawienia wydajności w przyszłości.
ZOBACZ TAKŻE
splice(2), tee(2), pipe(7)
TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ
ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-
list@lists.sourceforge.net.
Linux man-pages 6.9.1 2 maja 2024 r. vmsplice(2)