READV(3)

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, daß in verschiedene Puffer geschrieben wird.

Die Funktion writev() arbeitet genauso wie write(2) mit der Ausnahme, daß 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).