table of contents
other versions
- jessie 1.8-1
- stretch 1.22-1
- testing 2.6-1
- stretch-backports 2.6-1~bpo9+1
- unstable 2.6-1
other languages
FOPEN(3) | Linux-Programmierhandbuch | FOPEN(3) |
BEZEICHNUNG¶
fopen, fdopen, freopen - Funktionen zum Öffnen von DatenströmenÜBERSICHT¶
#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() öffnet 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 (möglicherweise gefolgt von zusätzlichen Zeichen, wie nachfolgend beschrieben):- r
- eine Textdatei zum Lesen öffnen. Der Datenstrom wird auf den Dateianfang positioniert.
- r+
- die Textdatei zum Lesen und Schreiben öffnen. Der Datenstrom wird auf den Dateianfang positioniert.
- w
- die Datei auf die Länge Null kürzen oder eine Textdatei zum Schreiben erzeugen. Der Datenstrom wird auf den Dateianfang positioniert.
- w+
- die Datei zum Lesen und Schreiben öffnen. Die Datei wird erzeugt, wenn sie nicht existiert, ansonsten abgeschnitten. Der Datenstrom wird auf den Dateianfang positioniert.
- a
- zum Anhängen (Schreiben am Dateiende) öffnen. Die Datei wird erzeugt, wenn sie nicht existiert. Der Datenstrom wird auf das Dateiende positioniert.
- a+
- zum Lesen und Anhängen (Schreiben am Dateiende) öffnen. Die Datei wird erzeugt, wenn sie nicht existiert. Die anfängliche Dateiposition zum Lesen ist am Dateianfang, die Ausgabe wird aber immer an das Dateiende angehängt.
fseek(stream, 0, SEEK_END);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 Kürzen 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 öffnet 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 primäre Nutzen der Funktion freopen() ist es, die Datei zu ändern, die mit einem Standard-Textdatenstrom ( stderr, stdin oder stdout) verbunden ist.
RÜCKGABEWERT¶
Bei erfolgreichem Abschluss geben fopen(), fdopen() und freopen() einen FILE-Zeiger zurück. Anderenfalls wird NULL zurückgegeben und errno dem Fehler entsprechend gesetzt.FEHLER¶
- EINVAL
- Der modus für fopen(), fdopen() oder freopen() war ungültig.
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 für die in modus angegebene Zeichenkette:- c (seit Glibc 2.3.3)
- keine »Öffnen«-Transaktion der Thread-Annulierungspunkte, nachfolgende Lese- und Schreiboperationen oder Thread-Abbruchpunkte durchführen. Dieser Schalter wird bei fdopen() ignoriert.
- e (seit Glibc 2.7)
- die Datei mit dem Schalter O_CLOEXEC öffnen. Siehe open(2) für weitere Informationen. Dieser Schalter wird bei fdopen() ignoriert.
- 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 für Dateien probiert, die zum Lesen geöffnet sind.
- x
- die Datei exklusiv öffnen (entspricht dem Schalter O_EXCL von open(2)). Falls die Datei bereits exisitiert, schlägt fopen() fehl und setzt errno auf EEXIST. Dieser Schalter wird für fdopen() ignoriert.
FEHLER¶
Wenn der modus auf individuelle Schalterzeichen hin ausgewertet wird (d.h. die Zeichen, die der »ccs«-Spezifikation vorausgehen), beschränkt die Glibc-Implementierung von fopen() und freopen() die Anzahl der untersuchten Zeichen in modus auf sieben (oder, in Glibc-Versionen vor 2.14, auf sechs, was nicht ausreichte, um mögliche Spezifikationen wie »rb+cmxe« aufzunehmen). Die aktuelle Implementierung von fdopen() wertet höchstens fünf Zeichen in Modus aus.SIEHE AUCH¶
open(2), fclose(3), fileno(3), fmemopen(3), fopencookie(3)KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.74 des Projekts Linux- man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter http://www.kernel.org/doc/man-pages/.ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother <krd@gulu.net>, Chris Leick <c.leick@vollbio.de> und Mario Blättermann <mario.blaettermann@gmail.com> erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.22. April 2012 | GNU |