NOMBRE¶
readv, writev - leen o escriben datos en múltiples buffers
SINOPSIS¶
#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);
DESCRIPCIÓN¶
La función
readv() lee
count bloques del fichero asociado
con el descriptor de fichero
fd en múltiples buffers descritos
por
vector.
La función
writev() escribe como máximo
count
bloques descritos por
vector en el fichero asociado con el descriptor
de fichero
fd.
El puntero
vector apunta a una estructura
iovec definida en
<sys/uio.h> como
struct iovec {
void *iov_base; /* Dirección de comienzo */
size_t iov_len; /* Número de bytes */
};
Los buffers son procesados en el orden especificado.
La función
readv() trabaja exactamente igual que
read(2)
salvo que rellena múltiples buffers.
La función
writev() trabaja exactamente igual que
write(2)
salvo que escribe múltiples buffers.
VALOR DEVUELTO¶
En caso de éxito, la función
readv() devuelve el
número de bytes leídos; la función
writev()
devuelve el número de bytes escritos. En caso de error, se devuelve -1,
y se modifica
errno con un valor apropiado.
ERRORES¶
Los errores son los mismos que para
read(2) y
write(2).
Adicionalmente se define el siguiente error.
- EINVAL
- La suma de los valores iov_len provoca un desbordamiento por arriba
en un valor ssize_t. O bien, el contador count es cero o
mayor que MAX_IOVEC.
4.4BSD (las funciones
readv y
writev aparecieron por primera vez
en BSD 4.2), Unix98, POSIX 1003.1-2001. La biblioteca libc5 de Linux usaba
size_t como tipo del parámetro
count, e
int como
tipo devuelto por estas funciones.
FALLOS¶
No es recomendable mezclar llamadas a funciones como
readv() o
writev(), que trabajan sobre descriptores de fichero, con funciones de
la biblioteca stdio; los resultados serán indefinidos y probablemente
indeseados.
VÉASE TAMBIÉN¶
read(2),
write(2)