_rtl_read

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu io.h - Index


Header-Datei

io.h

Kategorie

Eingabe-/Ausgaberoutinen

Prototyp

int _rtl_read(int handle, void *buf, unsigned len);

Beschreibung

Liest aus einer Datei.

Anmerkung:  Diese Funktion ersetzt die Funktion _read, die veraltet ist.

Diese Funktion liest len Bytes aus der Datei, die mit handle verknüpft ist, in den Puffer ein, auf den buf zeigt. Wenn die Datei im Textmodus geöffnet wird, entfernt _rtl_read keine Wagenrücklaufzeichen.

Das Argument handle enthält ein Datei-Handle, das durch einen Aufruf von creat, open, dup oder dup2 abgerufen wurde.

Bei Datenträgerdateien beginnt _rtl_read ab der aktuellen Position des Dateizeigers 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 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 _rtl_read einen der folgenden Werte zurück:

  • eine positive Ganzzahl, die die Anzahl der in den Puffer eingefügten Bytes angibt;
  • Null (0), womit das Erreichen des Dateiendes angezeigt wird.

Andernfalls gibt die Funktion -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 = _rtl_read(handle, buf, 10)) == -1) {
       printf("Read Failed.\n");
       exit(1);
    }
    else {
       printf("_rtl_read: %d bytes read.\n", bytes);
    }
    return 0;
 }



Portabilität



POSIX Win32 ANSI C ANSI C++

+