Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
fopen, fdopen, freopen - Funktionen zum Offnen von Datenstromen
"UBERSICHT
#include <stdio.h>
FILE *fopen(const char *pfad, const char *modus);
FILE *fdopen(int fd, const char *modus);
FILE *freopen(const char *pfad, const char *modus, FILE *datenstrom);
Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):
fdopen(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
BESCHREIBUNG
Die Funktion fopen() offnet die Datei, deren Name die Zeichenkette ist,
auf den pfad zeigt, und erzeugt einem damit verbundenen Datenstrom.
Das Argument modus zeigt auf eine Zeichenkette, die mit einer der
folgenden Sequenzen beginnt (Diesen Sequenzen konnen zusatzliche
Zeichen folgen.):
r eine Textdatei zum Lesen offnen. Der Datenstrom wird auf den
Dateianfang positioniert.
r+ die Textdatei zum Lesen und Schreiben offnen. Der Datenstrom
wird auf den Dateianfang positioniert.
w die Datei auf die Lange Null kurzen oder eine Textdatei zum
Schreiben erzeugen. Der Datenstrom wird auf den Dateianfang
positioniert.
w+ die Datei zum Lesen und Schreiben offnen. Die Datei wird
erzeugt, wenn sie nicht existiert, ansonsten abgeschnitten. Der
Datenstrom wird auf den Dateianfang positioniert.
a zum Anhangen (Schreiben am Dateiende) offnen. Die Datei wird
erzeugt, wenn sie nicht existiert. Der Datenstrom wird auf das
Dateiende positioniert.
a+ zum Lesen und Anhangen (Schreiben am Dateiende) offnen. Die
Datei wird erzeugt, wenn sie nicht existiert. Die anfangliche
Dateiposition zum Lesen ist am Dateianfang, die Ausgabe wird
aber immer an das Dateiende angehangt.
Die Zeichenkette modus kann auch den Buchstaben >>b<< enthalten,
entweder als ein letztes Zeichen oder zwischen den Zeichen in einem der
oben beschriebenen Zeichenketten aus zwei Buchstaben. Dies ist
ausschlieBlich aus Kompatibilitatsgrunden zu C89 so und hat keinerlei
Auswirkungen; das >>b<< wird auf allen POSIX-konformen Systemen
einschlieBlich Linux ignoriert. (Andere Systeme konnten Text- und
Binardateien unterschiedlich behandeln und das >>b<< hinzuzufugen
konnte sich als klug erweisen, falls Sie E/As auf die Binardatei
ausfuhren und erwarten, dass Ihr Programm auf Nicht-UNIX-Umgebungen
portiert wird.)
Lesen Sie die folgenden ANMERKUNGEN, um Einzelheiten uber
Glibc-Erweiterungen fur modus zu erfahren.
Jede erstellte Datei wird den Modus S_IRUSR | S_IWUSR | S_IRGRP |
S_IWGRP | S_IROTH | S_IWOTH (0666) haben, wie er durch den Umask-Wert
des Prozesses geandert wurde (siehe umask(2)).
Lese- und Schreibzugriffe konnen in Lese-/Schreibdatenstromen in
beliebiger Reihenfolge gemischt werden. Beachten Sie, dass ANSI-C
verlangt, dass zwischen einer Eingabe- und einer Ausgabeoperation eine
Dateipositionierungsfunktion ausgefuhrt wird, auBer wenn eine Eingabe
auf das Dateiende traf. (Falls diese Bedingung nicht eingehalten wird,
darf beim Lesen etwas anderes als das zuletzt geschriebene
zuruckgegeben werden.) Daher ist es ein bewahrtes Verfahren (und
tatsachlich manchmal unter Linux notig) eine fseek(3)- oder
fgetpos-Operation zwischen Schreib- und Leseoperationen eines solchen
Datenstroms einzuschieben. Diese Operation konnte der Aufruf eines
scheinbaren Leerbefehls (wie z.B. fseek(..., 0L, SEEK_CUR) fur dessen
synchroniserenden Nebeneffekt sein.
Eine Datei im Anhange-Modus zu offnen (a als erstes Zeichen von modus),
hat zur Folge, dass alle nachfolgenden Schreiboperationen in diesen
Datenstrom am Dateiende erscheinen, als ob ihnen der Aufruf
fseek(stream,0,SEEK_END);
vorausgegangen ware.
Die Funktion fdopen() erzeugt einen mit einem existierenden
Dateideskriptor fd verbundenen Datenstrom. Der modus der Zeichenkette
(einer der Werte >>r<<, >>r+<<, >>w<<, >>w+<<, >>a<<, >>a+<<) muss
kompatibel mit dem Modus des Dateideskriptors sein. Der
Dateipositionsanzeiger des neuen Datenstroms wird den von fd gesetzt
und die Anzeigen von Fehlern und Dateienden werden geleert. Die Modi
>>w<< und >>w+<< verursachen kein Kurzen der Datei. dup() wird nicht
aufgerufen und der Dateideskriptor wird geschlossen, wenn der mit
fdopen() erzeugte Datenstrom geschlossen wird. Wenn fdopen() auf
gemeinsam benutzten Speicher angewandt wird, ist das Ergebnis nicht
definiert.
Die Funktion freopen offnet die Datei, deren Name die Zeichenkette ist,
auf die pfad zeigt, und verbindet damit den Datenstrom, auf den
datenstrom zeigt. Der Originaldatenstrom wird geschlossen (wenn er
existiert). Das Argument modus wird genauso wie in der Funktion fopen()
benutzt. Der primare Nutzen der Funktion freopen() ist es, die Datei zu
andern, die mit einem Standard-Textdatenstrom (stderr, stdin oder
stdout) verbunden ist.
R"UCKGABEWERT
Bei erfolgreichem Abschluss geben fopen(), fdopen() und freopen() einen
FILE-Zeiger zuruck. Anderenfalls wird NULL zuruckgegeben und errno dem
Fehler entsprechend gesetzt.
FEHLER
EINVAL Der modus fur fopen(), fdopen() oder freopen() war ungultig.
Die Funktionen fopen(), fdopen() und freopen() konnen auch fehlschlagen
und errno wegen Fehlern setzen, die fur die Routine malloc(3)
spezifiziert sind.
Die Funktion fopen() kann auch fehlschlagen und errno wegen Fehlern
setzen, die fur die Routine open(2) spezifiziert sind.
Die Funktion fdopen() kann auch fehlschlagen und errno wegen Fehlern
setzen, die fur die Routine fcntl(2) spezifiziert sind.
Die Funktion freopen() kann auch fehlschlagen und errno wegen Fehlern
setzen, die fur die Routinen open(2), fclose(3) und fflush(3)
spezifiziert sind.
KONFORM ZU
Die Funktionen fopen() und freopen() entsprechen C89. Die Funktion
fdopen() entspricht POSIX.1-1990.
ANMERKUNGEN
Anmerkungen zur Glibc
Die C-Bibliothek von GNU erlaubt die folgenden Erweiterungen fur die in
modus angegebene Zeichenkette:
c (seit Glibc 2.3.3)
keine >>Offnen<<-Operation der Thread-Annulierungspunkte machen
oder nachfolgende Lese- und Schreiboperationen.
e (seit Glibc 2.7)
die Datei mit dem Schalter O_CLOEXEC offnen. Siehe open(2) fur
weitere Informationen.
m (seit Glibc 2.3)
versuchen mit mmap(2) auf die Datei zuzugreifen, anstatt der
E/A-Aufrufe (read(2), write(2)). Derzeit wird mmap(2) nur fur
Dateien probiert, die zum Lesen geoffnet sind.
x die Datei exklusiv offnen (entspricht dem Schalter O_EXCL von
open(2)). Falls die Datei bereits exisitiert, schlagt fopen()
fehl und setzt errno auf EEXIST. Dieser Schalter wird fur
fdopen() ignoriert.
SIEHE AUCH
open(2), fclose(3), fileno(3), fmemopen(3), fopencookie(3)
KOLOPHON
Diese Seite ist Teil der Veroffentlichung 3.32 des Projekts
Linux-man-pages. Eine Beschreibung des Projekts und Informationen, wie
Fehler gemeldet werden konnen, finden sich unter
http://www.kernel.org/doc/man-pages/.
"UBERSETZUNG
Die deutsche Ubersetzung dieser Handbuchseite wurde von Patrick Rother
<krd@gulu.net> und Chris Leick <c.leick@vollbio.de> erstellt.
Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General
Public License Version 3 oder neuer bezuglich der Copyright-
Bedingungen. Es wird KEINE HAFTUNG ubernommen.
Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden,
schicken Sie bitte eine E-Mail an <debian-l10n-
german@lists.debian.org>.