.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1990, 1991 The Regents of the University of California. .\" All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" Chris Torek and the American National Standards Committee X3, .\" on Information Processing Systems. .\" .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB) .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" %%%LICENSE_END .\" .\" @(#)fopen.3 6.8 (Berkeley) 6/29/91 .\" .\" Converted for Linux, Mon Nov 29 15:22:01 1993, faith@cs.unc.edu .\" Modified, aeb, 960421, 970806 .\" Modified, joey, aeb, 2002-01-03 .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH FOPEN 3 "15. September 2017" GNU Linux\-Programmierhandbuch .SH BEZEICHNUNG fopen, fdopen, freopen \- Funktionen zum Öffnen von Datenströmen .SH ÜBERSICHT .nf \fB#include \fP .PP \fBFILE *fopen(const char *\fP\fIpfadname\fP\fB, const char *\fP\fImodus\fP\fB);\fP .PP \fBFILE *fdopen(int \fP\fIfd\fP\fB, const char *\fP\fImodus\fP\fB);\fP .PP \fBFILE *freopen(const char *\fP\fIpfadname\fP\fB, const char *\fP\fImodus\fP\fB, FILE *\fP\fIdatenstrom\fP\fB);\fP .fi .PP .in -4n Mit Glibc erforderliche Makros (siehe \fBfeature_test_macros\fP(7)): .in .PP \fBfdopen\fP(): _POSIX_C_SOURCE .SH BESCHREIBUNG Die Funktion \fBfopen\fP() öffnet die Datei, deren Name die Zeichenkette ist, auf die \fIpfadname\fP zeigt, und erzeugt einen damit verbundenen Datenstrom. .PP Das Argument \fImodus\fP zeigt auf eine Zeichenkette, die mit einer der folgenden Sequenzen beginnt (möglicherweise gefolgt von zusätzlichen Zeichen, wie nachfolgend beschrieben): .TP \fBr\fP eine Textdatei zum Lesen öffnen. Der Datenstrom wird auf den Dateianfang positioniert. .TP \fBr+\fP die Textdatei zum Lesen und Schreiben öffnen. Der Datenstrom wird auf den Dateianfang positioniert. .TP \fBw\fP die Datei auf die Länge Null kürzen oder eine Textdatei zum Schreiben erzeugen. Der Datenstrom wird auf den Dateianfang positioniert. .TP \fBw+\fP die Datei zum Lesen und Schreiben öffnen. Die Datei wird erzeugt, wenn sie nicht existiert, ansonsten abgeschnitten. Der Datenstrom wird auf den Dateianfang positioniert. .TP \fBa\fP zum Anhängen (Schreiben am Dateiende) öffnen. Die Datei wird erzeugt, wenn sie nicht existiert. Der Datenstrom wird auf das Dateiende positioniert. .TP \fBa+\fP 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. .PP Die Zeichenkette \fImodus\fP 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 ausschließlich aus Kompatibilitätsgründen zu C89 so und hat keinerlei Auswirkungen; das »b« wird auf allen POSIX\-konformen Systemen einschließlich Linux ignoriert. (Andere Systeme könnten Text\- und Binärdateien unterschiedlich behandeln und das »b« hinzuzufügen könnte sich als klug erweisen, falls Sie E/As auf die Binärdatei ausführen und erwarten, dass Ihr Programm auf Nicht\-UNIX\-Umgebungen portiert wird.) .PP Lesen Sie die folgenden ANMERKUNGEN, um Einzelheiten über Glibc\-Erweiterungen für \fImodus\fP zu erfahren. .PP Jede erstellte Datei wird den Modus \fBS_IRUSR\fP | \fBS_IWUSR\fP | \fBS_IRGRP\fP | \fBS_IWGRP\fP | \fBS_IROTH\fP | \fBS_IWOTH\fP (0666) haben, wie er durch den Umask\-Wert des Prozesses geändert wurde (siehe \fBumask\fP(2)). .PP Lese\- und Schreibzugriffe können in Lese\-/Schreibdatenströmen in beliebiger Reihenfolge gemischt werden. Beachten Sie, dass ANSI\-C verlangt, dass zwischen einer Eingabe\- und einer Ausgabeaktion eine Dateipositionierungsfunktion ausgeführt wird, außer wenn eine Eingabe auf das Dateiende traf. (Falls diese Bedingung nicht eingehalten wird, darf beim Lesen etwas anderes als das zuletzt geschriebene zurückgegeben werden.) Daher ist es ein bewährtes Verfahren (und tatsächlich manchmal unter Linux nötig) eine \fBfseek\fP(3)\- oder \fBfgetpos\fP\-Aktion zwischen Schreib\- und Leseaktionen eines solchen Datenstroms einzuschieben. Diese Aktion könnte der Aufruf eines scheinbaren Leerbefehls (wie z.B. \fIfseek(…, 0L, SEEK_CUR)\fP sein, der für seinen synchroniserenden Nebeneffekt aufgerufen wird). .PP Eine Datei im Anhänge\-Modus zu öffnen (\fBa\fP als erstes Zeichen von \fImodus\fP) hat zur Folge, dass alle nachfolgenden Schreibaktionen in diesen Datenstrom am Dateiende erscheinen, als ob ihnen folgender Aufruf vorausgegangen wäre: .PP .in +4n .EX fseek(stream, 0, SEEK_END); .EE .in .PP Der dem Strom zugeordnete Dateideskriptor wird durch einen Aufruf von \fBopen\fP(2) mit den folgenden Schaltern geöffnet: .RS .TS allbox; lb lb c l. fopen()\-Modus open()\-Schalter \fIr\fP O_RDONLY \fIw\fP O_WRONLY | O_CREAT | O_TRUNC \fIa\fP O_WRONLY | O_CREAT | O_APPEND \fIr+\fP O_RDWR \fIw+\fP O_RDWR | O_CREAT | O_TRUNC \fIa+\fP O_RDWR | O_CREAT | O_APPEND .TE .RE .\" .SS fdopen() .\" Die Funktion \fBfdopen\fP() erzeugt einen mit einem existierenden Dateideskriptor \fIfd\fP verbundenen Datenstrom. Der \fImodus\fP 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 \fIfd\fP gesetzt und die Anzeigen von Fehlern und Dateienden werden geleert. Die Modi »w« und »w+« verursachen kein Kürzen der Datei. \fBdup\fP() wird nicht aufgerufen und der Dateideskriptor wird geschlossen, wenn der mit \fBfdopen\fP() erzeugte Datenstrom geschlossen wird. Wenn \fBfdopen\fP() auf gemeinsam benutzten Speicher angewandt wird, ist das Ergebnis nicht definiert. .SS freopen() Die Funktion \fBfreopen\fP öffnet die Datei, deren Name die Zeichenkette ist, auf die \fIpfadname\fP zeigt, und verbindet damit den Datenstrom, auf den \fIdatenstrom\fP zeigt. Der Originaldatenstrom wird geschlossen (wenn er existiert). Das Argument \fImodus\fP wird genauso wie in der Funktion \fBfopen\fP() benutzt. .PP Falls das Argument \fIpfadname\fP ein Null\-Zeiger ist, ändert \fBfreopen\fP() den Modus des Datenstroms auf den in \fImodus\fP angegebenen, d.h. \fBfreopen\fP() öffnet den dem Pfadnamen zugeordneten Datenstrom erneut. Die Spezifikation für dieses Verhalten wurde in dem Standard C99 hinzugefügt, bei dem es heißt: .PP .RS In diesem Fall muss der dem Datenstrom zugeordnete Dateideskriptor nicht geschlossen werden, falls der Aufruf von \fBfreopen\fP() erfolgreich ist. Es ist implementierungsabhängig, welche Modusänderungen erlaubt sind (falls überhaupt) und unter welchen Umständen. .RE .PP Die primäre Verwendung der Funktion \fBfreopen\fP() ist es, die Datei zu ändern, die mit einem Standard\-Textdatenstrom (\fIstderr\fP, \fIstdin\fP oder \fIstdout\fP) verbunden ist. .SH RÜCKGABEWERT Bei erfolgreichem Abschluss geben \fBfopen\fP(), \fBfdopen\fP() und \fBfreopen\fP() einen \fBFILE\fP\-Zeiger zurück. Anderenfalls wird NULL zurückgegeben und \fIerrno\fP dem Fehler entsprechend gesetzt. .SH FEHLER .TP \fBEINVAL\fP Der \fImodus\fP für \fBfopen\fP(), \fBfdopen\fP() oder \fBfreopen\fP() war ungültig. .PP Die Funktionen \fBfopen\fP(), \fBfdopen\fP() und \fBfreopen\fP() können auch fehlschlagen und \fIerrno\fP wegen Fehlern setzen, die für die Routine \fBmalloc\fP(3) spezifiziert sind. .PP Die Funktion \fBfopen\fP() kann auch fehlschlagen und \fIerrno\fP wegen Fehlern setzen, die für die Routine \fBopen\fP(2) spezifiziert sind. .PP Die Funktion \fBfdopen\fP() kann auch fehlschlagen und \fIerrno\fP wegen Fehlern setzen, die für die Routine \fBfcntl\fP(2) spezifiziert sind. .PP Die Funktion \fBfreopen\fP() kann auch fehlschlagen und \fIerrno\fP wegen Fehlern setzen, die für die Routinen \fBopen\fP(2), \fBfclose\fP(3) und \fBfflush\fP(3) spezifiziert sind. .SH ATTRIBUTE Siehe \fBattributes\fP(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke. .TS allbox; lbw28 lb lb l l l. Schnittstelle Attribut Wert T{ \fBfopen\fP(), \fBfdopen\fP(), \fBfreopen\fP() T} Multithread\-Fähigkeit MT\-Safe .TE .SH "KONFORM ZU" \fBfopen\fP(), \fBfreopen\fP(): POSIX.1\-2001, POSIX.1\-2008, C89, C99. .PP \fBfdopen\fP(): POSIX.1\-2001, POSIX.1\-2008. .SH ANMERKUNGEN .SS "Anmerkungen zur Glibc" Die C\-Bibliothek von GNU erlaubt die folgenden Erweiterungen für die in \fImodus\fP angegebene Zeichenkette: .TP \fBc\fP (seit Glibc 2.3.3) keine »Öffnen«\-Transaktion der Thread\-Annulierungspunkte, nachfolgende Lese\- und Schreibaktionen oder Thread\-Abbruchpunkte durchführen. Dieser Schalter wird bei \fBfdopen\fP() ignoriert. .TP \fBe\fP (seit Glibc 2.7) die Datei mit dem Schalter \fBO_CLOEXEC\fP öffnen. Siehe \fBopen\fP(2) für weitere Informationen. Dieser Schalter wird bei \fBfdopen\fP() ignoriert. .TP \fBm\fP (seit Glibc 2.3) .\" As at glibc 2.4: versuchen mit \fBmmap\fP(2) auf die Datei zuzugreifen, anstatt der E/A\-Aufrufe (\fBread\fP(2), \fBwrite\fP(2)). Derzeit wird \fBmmap\fP(2) nur für Dateien probiert, die zum Lesen geöffnet sind. .TP \fBx\fP .\" Since glibc 2.0? .\" FIXME . C11 specifies this flag die Datei exklusiv öffnen (entspricht dem Schalter \fBO_EXCL\fP von \fBopen\fP(2)). Falls die Datei bereits exisitiert, schlägt \fBfopen\fP() fehl und setzt \fIerrno\fP auf \fBEEXIST\fP. Dieser Schalter wird für \fBfdopen\fP() ignoriert. .PP Zusätzlich zu den vorhergehenden Zeichen unterstützen \fBfopen\fP() und \fBfreopen\fP() die folgende Syntax in \fImodus\fP: .PP \fB ,ccs=\fP\fIzeichenkette\fP .PP Die angegebene Zeichenkette wird als Name eines kodierten Zeichensatzes genommen und der Datenstrom wird als an der Breite ausgerichtet gekennzeichnet. Danach wandeln interne Umwandlungsfunktionen die Ein\- und Ausgaben vom und in den Zeichensatz \fIzeichenkette\fP um. Falls die Syntax \fB,ccs=\fP\fIzeichenkette\fP nicht angegeben wurde, wird die Breitenausrichtung des Datenstroms durch die erste Dateitransaktion festgelegt. Falls diese Transaktion eine Wide\-Charakter\-Transaktion ist, wird die Zeichenkette als breitenorientiert gekennzeichnet und Funktionen zum Umwandeln des kodierten Zeichensatzes werden geladen. .SH FEHLER .\" FIXME . http://sourceware.org/bugzilla/show_bug.cgi?id=12685 Wenn der \fImodus\fP auf individuelle Schalterzeichen hin ausgewertet wird (d.h. die Zeichen, die der »ccs«\-Spezifikation vorausgehen), beschränkt die Glibc\-Implementierung von \fBfopen\fP() und \fBfreopen\fP() die Anzahl der untersuchten Zeichen in \fImodus\fP 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 \fBfdopen\fP() wertet höchstens fünf Zeichen in Modus aus. .SH "SIEHE AUCH" \fBopen\fP(2), \fBfclose\fP(3), \fBfileno\fP(3), \fBfmemopen\fP(3), \fBfopencookie\fP(3), \fBopen_memstream\fP(3) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 4.16 des Projekts Linux\-\fIman\-pages\fP. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter \%https://www.kernel.org/doc/man\-pages/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother , Chris Leick , Mario Blättermann , Dr. Tobias Quathamer und Helge Kreutzmann 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 .