vmsplice(2) System Calls Manual vmsplice(2) NAZWA vmsplice - przenosi strony uzytkownika do/z potoku BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #define _GNU_SOURCE /* Patrz feature_test_macros(7) */ #include ssize_t vmsplice(int fd, const struct iovec *iov, size_t nr_segs, unsigned int flags); OPIS Jesli fd jest otwarty do zapisu, wywolanie systemowe vmsplice() przypisuje przedzialy nr_segs pamieci uzytkownika opisane przez iov do potoku. Jesli fd jest otwarty do odczytu, wywolanie systemowe vmsplice() wypelnia przedzialy nr_segs pamieci uzytkownika opisane przez iov z potoku. Deskryptor pliku fd musi odnosic sie do potoku. Wskaznik iov prowadzi do struktury iovec, opisanej w iovec(3type). Argument flags jest maska bitowa tworzona jako suma logiczna (OR) zera lub wiekszej liczby nastepujacych wartosci: SPLICE_F_MOVE Nieuzywane w vmsplice(); zob. splice(2). SPLICE_F_NONBLOCK Nie blokuje wejscia/wyjscia; wiecej informacji w podreczniku splice(2). SPLICE_F_MORE Obecnie nie wplywa na vmsplice(), lecz moze byc zaimplementowane w przyszlosci; zob. splice(2). SPLICE_F_GIFT Strony uzytkownika sa darowane jadru. Aplikacja nigdy nie moze modyfikowac tej pamieci, w przeciwnym przypadku bufor strony i dane na dysku moga sie roznic. Darowanie stron jadru oznacza, ze kolejne wywolanie splice(2) ze znacznikiem SPLICE_F_MOVE moze pomyslnie przesunac strony; jesli nie poda sie niniejszego znacznika, to kolejne splice(2) z SPLICE_F_MOVE musi skopiowac strony. Dane musza byc poprawnie wyrownane, zarowno w pamieci jak i co do dlugosci. WARTOSC ZWRACANA Po pomyslnym zakonczeniu vmsplice() zwraca liczbe bajtow przeniesionych do potoku. W przypadku bledu, vmsplice() zwraca -1 i ustawia errno, wskazujac blad. BLEDY EAGAIN We flags podano SPLICE_F_NONBLOCK, a operacja spowodowalaby blokowanie. EBADF fd jest nieprawidlowy albo nie odnosi sie do potoku. EINVAL nr_segs jest wiekszy niz IOV_MAX; albo nie wyrownano pamieci, jesli ustawiono SPLICE_F_GIFT. ENOMEM Brak pamieci. STANDARDY Linux. HISTORIA Linux 2.6.17, glibc 2.5. UWAGI vmsplice() jest objety ograniczeniami liczby przekazywanych segmentow, jakie obowiazuja inne zwektoryzowane funkcje odczytu/zapisu. Limit ten wynosi IOV_MAX i jest zdefiniowany w . Obecnie wynosi 1024. vmsplice() tak naprawde obsluguje prawdziwa operacje splice tylko w kierunku od pamieci uzytkownika do potoku. W przeciwnym kierunku faktycznie ma miejsce po prostu kopiowanie danych do przestrzeni uzytkownika. Jednak dzieki temu interfejs jest symetryczny i pozwala na korzystanie z vmsplice() z mozliwoscia poprawienia wydajnosci w przyszlosci. ZOBACZ TAKZE splice(2), tee(2), pipe(7) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.15 17 maja 2025 r. vmsplice(2)