read (C++)
Nach oben zu io.h - Index
Header-Datei
io.h
Kategorie
Eingabe-/Ausgaberoutinen
Prototyp
int read(int handle, void *buf, unsigned len);
Beschreibung
Liest aus einer Datei.
Die Funktion read liest len Bytes aus der Datei, die mit handle verknüpft ist, in den Puffer ein, auf den buf zeigt.
Bei im Textmodus geöffneten Dateien entfernt read Wagenrücklaufzeichen und meldet das Erreichen des Dateiendes, wenn ein Ctrl-Z gelesen wird.
Das Argument handle enthält ein Datei-Handle, das durch einen Aufruf von creat, open, dup oder dup2 abgerufen wird.
Bei Datenträgerdateien beginnt read beim aktuellen Dateizeiger zu lesen. Nach Abschluss des Lesevorgangs wird der Dateizeiger um die Anzahl gelesener Bytes erhöht. Bei Geräten werden die Bytes direkt aus dem Gerät gelesen.
Die Funktion read kann höchstens UINT_MAX -1 Bytes lesen, weil UINT_MAX gleichbedeutend mit -1 ist, dem Rückgabewert im Fehlerfall. UINT_MAX ist in limits.h definiert.
Rückgabewert
Bei erfolgreicher Ausführung gibt read eine Ganzzahl zurück, die die Anzahl der in den Puffer eingefügten Bytes angibt. Wenn die Datei im Textmodus geöffnet wurde, werden Wagenrücklauf- oder Ctrl-Z-Zeichen nicht in die Anzahl gelesener Bytes einbezogen.
Wenn das Dateiende erreicht wurde, gibt read 0 zurück. Bei einem Fehler gibt read - 1 zurück und weist der globalen Variablen errno einen der folgenden Werte zu:
EACCES |
Permission denied (Zugriff verweigert) |
EBADF |
Bad file number (Falsche Dateinummer) |
Beispiel
#include <stdio.h> #include <io.h> #include <alloc.h> #include <fcntl.h> #include <process.h> #include <sys\stat.h>; int main(void) { void *buf; int handle, bytes; buf = malloc(10); /* Sucht im aktuellen Verzeichnis nach einer Datei namens TEST.$$$ und versucht, 10 Bytes daraus zu lesen. Sie müssen die Datei TEST.$$$ erstellen, um dieses Beispiel ausführen zu können. */ if ((handle = open("TEST.$$$", O_RDONLY | O_BINARY, S_IWRITE | S_IREAD)) == -1) { printf("Error Opening File\n"); exit(1); } if ((bytes = read(handle, buf, 10)) == -1) { printf("Read Failed.\n"); exit(1); } else { printf("Read: %d bytes read.\n", bytes); } return 0; }
Portabilität
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |
+ |