Definition | #include <stdio.h> FILE *freopen(const char *filename, const char *mode, FILE *stream); FILE *freopen64(const char *filename, const char *mode, FILE *stream); |
Beschreibung | freopen() versucht zuerst, für den stream zugeordneten Datenstrom den Puffer zu leeren und den zugehörigen Dateideskriptor zu schließen. Fehler beim Leeren des Puffers oder beim Schließen der Datei werden ignoriert. Die Kennzeichen für Fehler oder Dateiende des Datenstroms werden gelöscht.
freopen() öffnet dann die Datei, auf deren Pfadname filename zeigt, und weist ihr den mit stream angegebenen Datenstrom zu. Das Argument mode wird genauso verwendet wie bei der Funktion fopen() (siehe fopen() ).
Der ursprüngliche Datenstrom wird geschlossen, unabhängig davon, ob das nachfolgende Öffnen erfolgreich ist. Für die automatische Konvertierung darf das b für binär in modus nicht angegeben werden. Die Umgebungsvariable IO_CONVERSION muss den Wert YES haben. Es besteht kein funktionaler Unterschied zwischen freopen und freopen64 , außer dass freopen64 einen Dateizeiger zurückgibt, der über die 2GB-Grenze hinausgehen kann. freopen64() setzt das O_LARGEFILE Bit im File Status Flag. BS2000 Siehe fopen() , fopen64() . (Ende) Einschränkung Bezieht sich stream auf eine BS2000-Datei und filename auf eine POSIX-Datei, ist das Öffnen der POSIX-Datei mit freopen() nur möglich, wenn stream sich auf stdin , stdout oder stderr bezieht. Ist das nicht der Fall, wird nur die BS2000-Datei geschlossen und 0 zurückgegeben. Bezieht sich stream auf eine POSIX-Datei und filename auf eine BS2000-Datei, ist das Öffnen der BS2000-Datei mit freopen() nur möglich, wenn stream sich auf stdin , stdout oder stderr bezieht. Ist das nicht der Fall, wird nur die POSIX-Datei geschlossen und 0 zurückgegeben. Dies gilt unabhängig davon, womit die Standardströme verknüpft sind. (Ende) |
Returnwert | Wert von stream |
|
| bei Erfolg. |
| Nullzeiger | bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen. |
Fehler | freopen() schlägt fehl, wenn gilt:
|
| EACCES
| Für eine Komponente des Pfades existiert kein Durchsuchrecht. Die Datei existiert, und die für mode geltenden Zugriffsrechte werden verweigert. Die Datei existiert nicht, und das übergeordnete Dateiverzeichnis der zu erstellenden Datei hat kein Schreibrecht. |
| EINTR
| Während des Systemaufrufs freopen() wurde ein Signal abgefangen. |
| EISDIR
| Die angegebene Datei ist ein Dateiverzeichnis und mode verlangt Schreibrecht. |
| ELOOP
| Es wurden zu viele symbolische Links bei der Auflösung von path festgestellt. |
| EMFILE
| {OPEN_MAX} -Dateideskriptoren sind bereits für den aufrufenden Prozess geöffnet.
|
| ENAMETOOLONG
|
|
| Die Länge von filename überschreitet {PATH_MAX} ,oder eine Komponente des Pfades ist länger als {NAME_MAX} . |
| ENFILE
| Die maximal erlaubte Anzahl von Dateien im System ist bereits geöffnet. |
| ENOENT
| Die angegebene Datei existiert nicht, oder filename zeigt auf eine leere Zeichenkette. |
| ENOSPC
| Die Datei existiert nicht, und das Dateiverzeichnis, in dem eine neue Datei erstellt werden soll, kann nicht erweitert werden. |
| ENOTDIR
| Eine Komponente des Pfades ist kein Dateiverzeichnis. |
| ENXIO
| Die angegebene Datei ist eine zeichen- oder blockorientierte Gerätedatei und das dieser Datei zugeordnete Gerät existiert nicht. |
| EOVERFLOW
| Die genannte Datei ist eine reguläre Datei, aber ihre Größe kann in einem Objekt des Typs off_t nicht korrekt dargestellt werden. |
| EROFS
| Die angegebene Datei befindet sich in einem Dateisystem, das nur Leserecht hat, und mode verlangt Schreibrecht. |
| ETXTBSY
| Die Datei ist eine reine Prozedurdatei (gemeinsam verwendete Textdatei), die gerade ausgeführt wird und mode setzt Schreibzugriff voraus. |
Hinweise | freopen() wird normalerweise dazu verwendet, die Dateizeiger stdin , stdout und stderr anderen Dateien zuzuordnen als den voreingestellten, geöffneten Standarddateien. stderr ist standardmäßig nicht gepuffert. Durch die Verwendung von freopen() wird stderr jedoch gepuffert oder zeilengepuffert.
Ob freopen() für eine BS2000- oder eine POSIX-Datei ausgeführt wird, hängt von der Programmumgebung ab. BS2000 Siehe
fopen() . (Ende) |
Siehe auch | creat() , fclose() , fopen() , fdopen() , stdio.h .
|