Manpages

BEZEICHNUNG

readv, writev − lese bzw. schreibe Daten in mehrere Puffer

ÜBERSICHT

#include <sys/uio.h>

int readv(int filedes, const struct iovec *vector,
size_t
count);

int writev(int filedes, const struct iovec *vector,
size_t
count);

BESCHREIBUNG

Die Funktion readv() liest count Blöcke aus der Datei, die mit dem Dateidescriptor filedes verbunden ist, in die verschiedenen Puffer, die durch vector beschrieben sind.

Die Funktion writev() schreibt höchstens count Blöcke, die durch vector beschrieben sind, in die Datei, die mit dem Dateidescriptor filedes verbunden ist.

Der Zeiger vector zeigt auf einen struct iovec, der in <sys/uio.h> wie folgt definiert ist.

struct iovect {

void *iovbase; /* Anfangsadresse */

size_t iov_len; /* Anzahl der Bytes */

};

Die Puffer werden in folgender Reihenfolge abgearbeitet: vector[0], vector[1], ... vector[count]

Die Funktion readv() arbeitet genauso wie read(2) mit der Ausnahme, dass in verschiedene Puffer geschrieben wird.

Die Funktion writev() arbeitet genauso wie write(2) mit der Ausnahme, dass verschiedene Puffer geschrieben werden.

RÜCKGABEWERT

Die Funktion readv() gibt die Anzahl der gelesenen Bytes oder −1 im Fehlerfall zurück, die Funktion writev() gibt die Anzahl der geschriebenen Bytes zurück

FEHLER

Wenn die Funktionen readv() und writev() fehlschlagen, setzen sie errno entsprechend:

EBADF

fd ist kein gültiger Dateideskriptor.

EINVAL

Von fd kann nicht gelesen (bei readv()) bzw. geschrieben (bei writev()) werden.

EFAULT

buf befindet sich außerhalb des vom Prozess erreichbaren Speicherbereiches.

EAGAIN

Nicht blockierende E/A wurde beim Aufruf von open() gewählt, aber der Lese- oder Schreibvorgang konnte nicht sofort erledigt werden.

EINTR

Der Lese- oder Schreibvorgang wurde unterbrochen bevor Daten übertragen werden konnten.

KONFORM ZU

unbekannt

BUGS

Es ist nicht ratsam, Aufrufe von Funktionen wie readv() oder writev(), die direkt mit den Dateideskriptoren agieren, mit Funktionen aus der stdio Bibliothek zu mischen. Die Ergebnisse sind undefiniert und sehr wahrscheinlich nicht die gewünschten.

SIEHE AUCH

read(2), write(2).