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.