.\" -*- coding: UTF-8 -*-
.\" Copyright (C) 2007, 2010 Michael Kerrisk <mtk.manpages@gmail.com>
.\" and Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" Modified Sat Jul 24 18:34:44 1993 by Rik Faith (faith@cs.unc.edu)
.\" Merged readv.[23], 2002-10-17, aeb
.\" 2007-04-30 mtk, A fairly major rewrite to fix errors and
.\"     add more details.
.\" 2010-11-16, mtk, Added documentation of preadv() and pwritev()
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH readv 2 "5 lutego 2023 r." "Linux man\-pages 6.03" 
.SH NAZWA
readv, writev, preadv, pwritev, preadv2, pwritev2 \- czytanie lub zapisywanie
danych do wielu buforów
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <sys/uio.h>\fP
.PP
\fBssize_t readv(int \fP\fIfd\fP\fB, const struct iovec *\fP\fIiov\fP\fB, int \fP\fIiovcnt\fP\fB);\fP
\fBssize_t writev(int \fP\fIfd\fP\fB, const struct iovec *\fP\fIiov\fP\fB, int \fP\fIiovcnt\fP\fB);\fP
.PP
\fBssize_t preadv(int \fP\fIfd\fP\fB, const struct iovec *\fP\fIiov\fP\fB, int \fP\fIiovcnt\fP\fB,\fP
\fB                off_t \fP\fIoffset\fP\fB);\fP
\fBssize_t pwritev(int \fP\fIfd\fP\fB, const struct iovec *\fP\fIiov\fP\fB, int \fP\fIiovcnt\fP\fB,\fP
\fB                off_t \fP\fIoffset\fP\fB);\fP
.PP
\fBssize_t preadv2(int \fP\fIfd\fP\fB, const struct iovec *\fP\fIiov\fP\fB, int \fP\fIiovcnt\fP\fB,\fP
\fB                off_t \fP\fIoffset\fP\fB, int \fP\fIflags\fP\fB);\fP
\fBssize_t pwritev2(int \fP\fIfd\fP\fB, const struct iovec *\fP\fIiov\fP\fB, int \fP\fIiovcnt\fP\fB,\fP
\fB                off_t \fP\fIoffset\fP\fB, int \fP\fIflags\fP\fB);\fP
.fi
.PP
.RS -4
Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)):
.RE
.PP
\fBpreadv\fP(), \fBpwritev\fP():
.nf
    Od glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 i wcześniejsze:
        _BSD_SOURCE
.fi
.SH OPIS
Wywołanie systemowe \fBreadv\fP() czyta liczbę \fIiovcnt\fP bloków z pliku
skojarzonego z deskryptorem pliku \fIfd\fP do wielu buforów opisanych przez
\fIiov\fP ("rozrzucone wejście").
.PP
Funkcja \fBwritev\fP() zapisuje co najwyżej \fIiovcnt\fP bloków opisanych przez
\fIiov\fP do pliku skojarzonego z deskryptorem pliku \fIfd\fP ("zgromadzone
wyjście").
.PP
The pointer \fIiov\fP points to an array of \fIiovec\fP structures, described in
\fBiovec\fP(3type).
.PP
Wywołanie systemowe \fBreadv\fP() działa tak samo jak \fBread\fP(2), z tą różnicą
że wypełnianych jest wiele buforów.
.PP
Wywołanie systemowe \fBwritev\fP() działa tak samo jak \fBwrite\fP(2), z tą
różnicą że zapisywane dane pochodzą z wielu buforów.
.PP
Bufory są przetwarzane w porządku, w którym zostały wymienione w
tablicy. Oznacza to, że \fBreadv\fP() całkowicie zapełni \fIiov[0]\fP zanim
przejdzie do \fIiov[1]\fP itd. (jeśli jest za mało danych, to nie wszystkie
bufory w \fIiov\fP zostaną wypełnione). Podobnie \fBwritev\fP zapisuje całkowicie
zawartość \fIiov[0]\fP, zanim przejdzie do \fIiov[1]\fP, itd.
.PP
.\" Regarding atomicity, see https://bugzilla.kernel.org/show_bug.cgi?id=10596
The data transfers performed by \fBreadv\fP()  and \fBwritev\fP()  are atomic: the
data written by \fBwritev\fP()  is written as a single block that is not
intermingled with output from writes in other processes; analogously,
\fBreadv\fP()  is guaranteed to read a contiguous block of data from the file,
regardless of read operations performed in other threads or processes that
have file descriptors referring to the same open file description (see
\fBopen\fP(2)).
.SS "preadv() i pwritev()"
Wywołanie systemowe \fBpreadv\fP() łączy w sobie funkcjonalności dostarczane
przez \fBreadv\fP() i przez \fBpread\fP(2). Wykonuje to samo zadanie, co
\fBreadv\fP(), ale dodaje czwarty argument, \fIoffset\fP, określający miejsce w
pliku, w którym zostanie przeprowadzona operacja wejściowa.
.PP
Wywołanie systemowe \fBpwritev\fP() łączy w sobie funkcjonalności dostarczane
przez \fBwritev\fP() i przez \fBpwrite\fP(2). Wykonuje to samo zadanie, co
\fBwritev\fP, ale dodaje czwarty argument, \fIoffset\fP, określający miejsce w
pliku, w którym zostanie przeprowadzona operacja wyjściowa.
.PP
Opisywane wywołania systemowe nie zmieniają pozycji przesunięcia w
pliku. Pliki wskazywane  przez \fIfd\fP muszą pozwalać na swobodny dostęp
(przeszukiwanie).
.SS "preadv2() i pwritev2()"
Te wywołania systemowe są\ podobne do wywołań \fBpreadv\fP() i \fBpwritev\fP(),
lecz dodają\ piąty argument \fIflags\fP, modyfikujący zachowanie w zależności od
wywołania.
.PP
W przeciwieństwie do \fBpreadv\fP() i \fBpwritev\fP(), jeśli argument \fIoffset\fP
wynosi \-1, to używane i aktualizowane jest przesunięcie bieżącego pliku.
.PP
Argument \fIflags\fP zawiera bitowe LUB z jednej lub więcej z następujących
flag:
.TP 
\fBRWF_DSYNC\fP (od Linuksa 4.7)
.\" commit e864f39569f4092c2b2bc72c773b6e486c7e3bd9
Provide a per\-write equivalent of the \fBO_DSYNC\fP \fBopen\fP(2)  flag.  This
flag is meaningful only for \fBpwritev2\fP(), and its effect applies only to
the data range written by the system call.
.TP 
\fBRWF_HIPRI\fP (od Linuksa 4.6)
Odczyt/zapis o wysokim priorytecie. Pozwala blokowym systemom plików na
odpytywanie urządzenia, co zapewnia niższe opóźnienia, lecz może wymagać
dodatkowych zasobów (obecnie ta funkcja nadaje się do użycia wyłącznie,
jeśli deskryptor pliku otwarto z\ flagą \fBO_DIRECT\fP).
.TP 
\fBRWF_SYNC\fP (od Linuksa 4.7)
.\" commit e864f39569f4092c2b2bc72c773b6e486c7e3bd9
Provide a per\-write equivalent of the \fBO_SYNC\fP \fBopen\fP(2)  flag.  This flag
is meaningful only for \fBpwritev2\fP(), and its effect applies only to the
data range written by the system call.
.TP 
\fBRWF_NOWAIT\fP (od Linuksa 4.14)
.\" commit 3239d834847627b6634a4139cf1dc58f6f137a46
.\" commit 91f9943e1c7b6638f27312d03fe71fcc67b23571
Do not wait for data which is not immediately available.  If this flag is
specified, the \fBpreadv2\fP()  system call will return instantly if it would
have to read data from the backing storage or wait for a lock.  If some data
was successfully read, it will return the number of bytes read.  If no bytes
were read, it will return \-1 and set \fIerrno\fP to \fBEAGAIN\fP (but see
\fBBUGS\fP).  Currently, this flag is meaningful only for \fBpreadv2\fP().
.TP 
\fBRWF_APPEND\fP (od Linuksa 4.16)
.\" commit e1fc742e14e01d84d9693c4aca4ab23da65811fb
Provide a per\-write equivalent of the \fBO_APPEND\fP \fBopen\fP(2)  flag.  This
flag is meaningful only for \fBpwritev2\fP(), and its effect applies only to
the data range written by the system call.  The \fIoffset\fP argument does not
affect the write operation; the data is always appended to the end of the
file.  However, if the \fIoffset\fP argument is \-1, the current file offset is
updated.
.SH "WARTOŚĆ ZWRACANA"
Gdy się powiodą, funkcje \fBreadv\fP(), \fBpreadv\fP() i \fBpreadv2\fP() zwracają
liczbę przeczytanych bajtów, a funkcje \fBwritev\fP(), \fBpwritev\fP() i
\fBpwritev2\fP() zwracają liczbę bajtów zapisanych.
.PP
Proszę zauważyć, że nie jest błędem przesłanie mniejszej liczby bajtów
niż\ żądano przez poprawne wywołanie (zob. \fBread\fP(2) i \fBwrite\fP(2)).
.PP
On error, \-1 is returned, and \fIerrno\fP is set to indicate the error.
.SH BŁĘDY
Zwracane błędy są takie same, jak w przypadku funkcji \fBread\fP(2) i
\fBwrite\fP(2). Ponadto \fBpreadv\fP(), \fBpreadv2\fP(), \fBpwritev\fP() i \fBpwritev2\fP()
mogą także zwrócić błędy takie jak w przypadku \fBlseek\fP(2). Dodatkowo
zdefiniowane są\ następujące błędy:
.TP 
\fBEINVAL\fP
Suma wartości \fIiov_len\fP przekracza rozmiar \fIssize_t\fP.
.TP 
\fBEINVAL\fP
Liczba \fIiovcnt\fP wektorów jest mniejsza niż zero lub większa niż
dopuszczalne maksimum.
.TP 
\fBEOPNOTSUPP\fP
Jako \fIflags\fP podano nieznaną flagę.
.SH WERSJE
\fBpreadv\fP() i \fBpwritev\fP() po raz pierwszy pojawiły się w Linuksie 2.6.30;
wsparcie biblioteczne  tych wywołań pojawiło się w glibc 2.10.
.PP
\fBpreadv2\fP() i \fBpwritev2\fP() po raz pierwszy pojawiły się w Linuksie 4.6;
wsparcie biblioteczne  tych wywołań pojawiło się w glibc 2.26.
.SH STANDARDY
.\" Linux libc5 used \fIsize_t\fP as the type of the \fIiovcnt\fP argument,
.\" and \fIint\fP as the return type.
.\" The readv/writev system calls were buggy before Linux 1.3.40.
.\" (Says release.libc.)
\fBreadv\fP(), \fBwritev\fP(): POSIX.1\-2001, POSIX.1\-2008, 4.4BSD (wywołania te
początkowo pojawiły się w BSD 4.2).
.PP
\fBpreadv\fP(), \fBpwritev\fP(): niestandardowe, ale obecne także w nowoczesnych
systemach BSD.
.PP
\fBpreadv2\fP(), \fBpwritev2\fP(): niestandardowe rozszerzenie systemu Linux.
.SH UWAGI
.\"
.\"
POSIX.1 pozwala w implementacji umieścić ograniczenie liczby argumentów,
które mogą\ być\ przekazane w \fIiov\fP. Implementacja może rozgłosić ten limit
definiując \fBIOV_MAX\fP w \fI<limits.h>\fP lub w czasie uruchomienia,
zwracaną wartością z \fIsysconf(_SC_IOV_MAX)\fP. Na współczesnych systemach
Linux limit ten wynosi 1024. W czasach Linuksa 2.0 wynosił 16.
.SS "Różnice biblioteki C/jądra"
Surowe wywołania systemowe \fBpreadv\fP() i \fBpwritev\fP() mają sygnatury wywołań
różniące się\ subtelnie od odpowiadających im w funkcji opakowującej
biblioteki GNU C pokazanych w SKŁADNI. Ostatni argument \fIoffset\fP, jest
rozpakowany przez funkcję opakowującą na dwa argumenty wywołania
systemowego:
.PP
\fB unsigned long \fP\fIpos_l\fP\fB, unsigned long \fP\fIpos\fP
.PP
Argumenty te zawierają 32 bitowy \fIoffset\fP w kolejności odpowiednio, od
najmniej i od najbardziej znaczącego bitu.
.SS "Historyczne różnice biblioteki C/jądra"
Aby rozwiązać sytuację, gdy \fIIOV_MAX\fP było tak niskie we wczesnych wersjach
Linuksa, funkcje opakowujące \fBreadv\fP() i \fBwritev\fP() wykonywały pewne
dodatkowe działania po wykryciu, że odpowiednie wywołanie systemowe
zakończyło się błędem z powodu przekroczenia limitu. W takim wypadku funkcja
\fBreadv\fP() biblioteki glibc przydzielała tymczasowy bufor, wystarczająco
duży, by pomieścić wszystkie elementy określone przez \fIiov\fP, przekazywała
ten bufor wywołaniu systemowemu \fBread\fP(2), kopiowała dane z bufora
tymczasowego do lokalizacji określonych przez \fIiov\fP, a następnie zwalniała
pamięć bufora. Funkcja glibc dla \fBwritev\fP() wykonywała analogiczne zadanie,
używając bufora tymczasowego i wywołania funkcji \fBwrite\fP(2).
.PP
The need for this extra effort in the glibc wrapper functions went away with
Linux 2.2 and later.  However, glibc continued to provide this behavior
until glibc 2.10.  Starting with glibc 2.9, the wrapper functions provide
this behavior only if the library detects that the system is running a Linux
kernel older than Linux 2.6.18 (an arbitrarily selected kernel version).
And since glibc 2.20 (which requires a minimum of Linux 2.6.32), the glibc
wrapper functions always just directly invoke the system calls.
.SH BŁĘDY
.\" See
.\" <https://lore.kernel.org/linux-fsdevel/fea8b16d-5a69-40f9-b123-e84dcd6e8f2e@www.fastmail.com/T/#u>
.\" The bug was introduced in
.\"    efa8480a831 fs: RWF_NOWAIT should imply IOCB_NOIO
.\"and fixed in
.\"    06c0444290 mm/filemap.c: generic_file_buffered_read() now uses find_get_pages_contig
Linux 5.9 and Linux 5.10 have a bug where \fBpreadv2\fP()  with the
\fBRWF_NOWAIT\fP flag may return 0 even when not at end of file.
.SH PRZYKŁADY
Następujący przykładowy kod pokazuje użycie funkcji \fBwritev\fP():
.PP
.in +4n
.EX
char          *str0 = "hello ";
char          *str1 = "world\en";
ssize_t       nwritten;
struct iovec  iov[2];

iov[0].iov_base = str0;
iov[0].iov_len = strlen(str0);
iov[1].iov_base = str1;
iov[1].iov_len = strlen(str1);

nwritten = writev(STDOUT_FILENO, iov, 2);
.EE
.in
.SH "ZOBACZ TAKŻE"
\fBpread\fP(2), \fBread\fP(2), \fBwrite\fP(2)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Robert Luberda <robert@debian.org>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
