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

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)