Provided by:
manpages-pl-dev_20060617-1_all 
NAZWA
readv, writev - czytanie lub zapisywanie danych do wielu buforów
SKŁADNIA
#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 bloków z pliku skojarzonego z
desktyptorem pliku fd do wielu buforów opisanych przez wektor vector.
Funkcja writev() zapisuje co najwyżej count bloków opisanych przez
wektor vector do pliku skojarzonego z deskryptorem pliku fd.
Wskaźnik vector prowadzi do struktury struct iovec zdefiniowanej w
pliku <sys/uio.h> następująco:
struct iovec {
void *iov_base; /* Adres początkowy */
size_t iov_len; /* Liczba bajtów */
};
Bufory są przetwarzane w kolejności, w jakiej zostały podane.
Funkcja readv() działa tak samo jak read(2) z tą różnicą, że
wypełnianych jest wiele buforów.
Funkcja writev() działa tak samo jak write(2) z tą różnicą, że
zapisywane dane pochodzą z wielu buforów.
WARTOŚĆ ZWRACANA
Gdy się powiodą, funkcja readv() zwraca liczbę przeczytanych bajtów, a
funkcja writev() zwraca liczbę bajtów zapisanych. W przypadku błędu
zwracane jest -1 i odpowiednio jest ustawiona zmienna errno.
BŁĘDY
Zwracane błędy są takie same, jak w przypadku funkcji read(2) i
write(2). Dodatkowo zdefiniowany jest następujący błąd:
EINVAL Suma wartości iov_len przekracza rozmiar ssize_t. Albo liczba
count wektorów jest mniejsza niż zero lub większa niż
dopuszczalne maksimum.
ZGODNE Z
4.4BSD (funkcje readv() i writev() początkowo pojawiły się w 4.2BSD),
Unix98, POSIX 1003.1-2001. libc5 w Linuksie używała size_t jako typ
parametru count oraz int jako typ wartości zwracanej przez te funkcje.
UWAGI DOTYCZĄCE IMPLEMENTACJI POD LINUKSEM
Standard SUSv3 dopuszcza, aby implementacja wprowadziła ograniczenia na
liczbę rekordów przekazywanych w parametrze vector. Limit ten jest
określony jako wartość IOV_MAX w <limits.h>, a w czasie działania
programu - jako wartość zwracana przez wywołanie sysconf(_SC_IOV_MAX).
Pod Linuksem limit określony przez te mechanizmy wynosi 1024, co jest
prawdziwym ograniczeniem jądra Linuksa. Jednakże funkcje glibc wykonują
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 readv() bibloteki glibc przydziela tymczasowy bufor,
wystarczająco duży, by pomieścić wszystkie elementy określone przez
vector, przekazuje ten bufor wywołaniu systemowemu read(), kopiuje dane
z bufora tymczasowego do lokalizacji określonych przez vector, a
następnie zwalnia pamięć bufora. Funkcja glibc dla writev() wykonuje
analogiczne zadanie używając bufora tymczasowego i wywołania funkcji
write().
BŁĘDY
Nie jest zalecane mieszanie wywołań funkcji operujących na
deskryptorach plików, takich jak readv() czy writev(), z funkcjami
biblioteki stdio; rezultaty takiego mieszania nie są określone i
najprawdopodobniej nie będą zgodne z oczekiwaniami.
ZOBACZ TAKŻE
read(2), write(2)
2002-10-17 READV(2)