Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       readv, writev - czytanie lub zapisywanie danych do wielu buforow

SK/LADNIA

       #include <sys/uio.h>

       ssize_t readv(int fd, const struct iovec *vector, int count);

       ssize_t writev(int fd, const struct iovec *vector, int count);

OPIS

       Funkcja  readv()  czyta  liczb  count  blokow  z  pliku  skojarzonego z
       desktyptorem pliku fd do wielu buforow opisanych przez wektor vector.

       Funkcja writev() zapisuje  co  najwyej  count  blokow  opisanych  przez
       wektor vector do pliku skojarzonego z deskryptorem pliku fd.

       Wskanik vector prowadzi do struktury struct iovec zdefiniowanej w pliku
       <sys/uio.h> nastpujco:

         struct iovec {
             void *iov_base;   /* Adres pocztkowy */
             size_t iov_len;   /* Liczba bajtow */
         };

       Bufory s przetwarzane w kolejnoci, w jakiej zostaly podane.

       Funkcja readv() dziala tak samo jak read(2) z t ronic,  e  wypelnianych
       jest wiele buforow.

       Funkcja  writev()  dziala tak samo jak write(2) z t ronic, e zapisywane
       dane pochodz z wielu buforow.

WARTO ZWRACANA

       Gdy si powiod, funkcja readv() zwraca  liczb  przeczytanych  bajtow,  a
       funkcja  writev()  zwraca  liczb  bajtow  zapisanych.  W przypadku bldu
       zwracane jest -1 i odpowiednio jest ustawiona zmienna errno.

B/LDY

       Zwracane bldy  s  takie  same,  jak  w  przypadku  funkcji  read(2)   i
       write(2). Dodatkowo zdefiniowany jest nastpujcy bld:

       EINVAL Suma  wartoci  iov_len  przekracza  rozmiar ssize_t. Albo liczba
              count wektorow jest mniejsza ni zero lub wiksza ni  dopuszczalne
              maksimum.

ZGODNE Z

       4.4BSD  (funkcje  readv()  i writev()  pocztkowo pojawily si w 4.2BSD),
       Unix98, POSIX 1003.1-2001. libc5 w  Linuksie  uywala  size_t  jako  typ
       parametru count oraz int jako typ wartoci zwracanej przez te funkcje.

UWAGI DOTYCZCE IMPLEMENTACJI POD LINUKSEM

       Standard SUSv3 dopuszcza, aby implementacja wprowadzila ograniczenia na
       liczb rekordow przekazywanych  w  parametrze  vector.  Limit  ten  jest
       okrelony  jako  warto   IOV_MAX  w  <limits.h>,  a  w  czasie dzialania
       programu -  jako warto zwracana przez  wywolanie  sysconf(_SC_IOV_MAX).
       Pod  Linuksem  limit  okrelony przez te mechanizmy wynosi 1024, co jest
       prawdziwym ograniczeniem jdra Linuksa. Jednake  funkcje  glibc  wykonuj
       pewne   dodatkowe   dzialania  po  wykryciu,  e  odpowiednie  wywolanie
       systemowe zakoczylo si bldem z powodu  przekroczenia  limitu.  W  takim
       wypadku  funkcja   readv() bibloteki glibc przydziela tymczasowy bufor,
       wystarczajco duy, by pomieci wszystkie elementy okrelone przez  vector,
       przekazuje  ten  bufor  wywolaniu  systemowemu  read(),  kopiuje dane z
       bufora tymczasowego do lokalizacji okrelonych przez vector, a  nastpnie
       zwalnia  pami  bufora.  Funkcja glibc dla writev() wykonuje analogiczne
       zadanie uywajc bufora tymczasowego i wywolania funkcji write().

B/LDY

       Nie jest zalecane mieszanie wywola funkcji operujcych na  deskryptorach
       plikow,  takich jak readv() czy writev(), z funkcjami biblioteki stdio;
       rezultaty takiego mieszania nie s okrelone i najprawdopodobniej nie  bd
       zgodne z oczekiwaniami.

ZOBACZ TAKE

       read(2), write(2)

INFORMACJE O T/LUMACZENIU

       Powysze  tlumaczenie  pochodzi z nieistniejcego ju Projektu Tlumaczenia
       Manuali i moe nie by aktualne. W razie zauwaenia ronic  midzy  powyszym
       opisem  a  rzeczywistym  zachowaniem  opisywanego programu lub funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.

                                  2002-10-17                          READV(2)