Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

readv - vektorielles Lesen aus einer Datei

&pagelevel(4)&pagelevel

Definition

#include <sys/uio.h>

ssize_t readv(int fildes, const struct iovec *iov, int iovcnt);

Beschreibung

siehe read() .

readv() verhält sich wie read(), liest jedoch die Eingabedaten aus der zu fildes gehörenden Datei in die iovcnt-Puffer, die als Elemente des Feldes iov spezifiziert sind: iov[0], iov[1], ..., iov[iovcnt-1].
Es muss gelten 0 < iovcnt{IOV_MAX}

Die Struktur iovec enthält folgende Elemente:

addr_t   iov_base;
size_t   iov_len;

Jeder iovec-Eintrag gibt die Basisadresse und Länge eines Speicherbereichs (Puffer) an, in den Daten gebracht werden sollen. readv() füllt einen Puffer immer vollständig, bevor es mit dem nächsten weitermacht.

Bei Erfolg gibt readv() die Anzahl der tatsächlich gelesenen und in den Puffer geschriebenen Bytes zurück. Bei Erreichen des Dateiendes wird 0 zurückgegeben.

Returnwert

ganze Zahl >0



bei Erfolg. Die Zahl gibt die Anzahl der tatsächlich gelesenen Bytes an.


0

wenn beim Lesen das Dateiende (EOF) erreicht wurde.


-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen. Der Inhalt der Puffer ist unbestimmt.

Fehler

readv() schlägt fehl, wenn gilt:


EAGAIN

Das Flag O_NONBLOCK ist für den Dateideskriptor gesetzt und der Prozess würde durch die Leseoperation angehalten werden.


Erweiterung


EAGAIN

Der Systemspeicher, der für „raw“-Ein-/Ausgabe zur Verfügung steht, ist vorübergehend nicht ausreichend,
oder in einer Terminal-Gerätedatei warten keine Daten darauf, gelesen zu werden, und O_NONBLOCK ist gesetzt,
oder in einen Datenstrom wartet keine Nachricht darauf, gelesen zu werden, und O_NONBLOCK ist gesetzt. (Ende)


EBADF

fildes ist kein gültiger, zum Lesen geöffneter Dateideskriptor.


EBADMSG

Die Datei ist eine STREAM-Datei im control-normal-mode, aber die Nachricht, die darauf wartet, gelesen zu werden, enthält einen Steuerteil.


EFAULT

iov weist über den zugewiesenen Adressraum des Prozesses hinaus.


EINTR

Die Leseoperation wurde durch ein Signal unterbrochen. Es wurden keine Daten übertragen.


EINVAL

Es wurde versucht, von einem Datenstrom zu lesen, der mit einem Multiplexer verbunden ist
oder die Summe der iov-len-Werte im Feld iov bewirkte einen ssize_t-Überlauf
oder iovcnt <= 0 oder iovcnt > 16.


EIO

Ein physikalischer Ein-/Ausgabefehler ist aufgetreten,
oder der Prozess ist Mitglied einer Hintergrund-Prozessgruppe und versucht, von seinem steuernden Terminal zu lesen.
Der Prozess ignoriert oder blockiert das Signal SIGTTIN, oder die Prozessgruppe ist verwaist.


ENXIO

Eine Anforderung für ein nicht existierendes Gerät wurde gemacht,
oder die Anforderung lag außerhalb der Fähigkeiten des Geräts.


ENOLINK

fildes liegt auf einem fernen Rechner, und die Verbindung zu diesem Rechner ist nicht mehr aktiv.


Ein readv() von einer STREAMS-Datei ist auch dann erfolglos, wenn am Stream-Kopf eine Fehlermeldung empfangen wird. In diesem Fall wird errno auf den Wert gesetzt, der in der Fehlermeldung zurückgegeben wird. Bei Auftreten eines Hangups im Stream, der gerade gelesen wird, läuft readv() normal weiter, bis die Lesewarteschlange des Stream-Kopfes entleert ist. Danach wird 0 zurückgegeben.

Hinweis

Zum Lesen von Verzeichnissen wird dringend empfohlen, readdir() bzw. readdir64() anstelle von read() zu verwenden.

Siehe auch

fcntl(), ioctl(), lseek(), open(), pipe(), readdir(), readdir64(), stropts.h, sys/uio.h, unistd.h.