Provided by: manpages-de-dev_1.11-1_all bug

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.

       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
       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.)

       Lesen Sie die folgenden ANMERKUNGEN, um Einzelheiten über Glibc-Erweiterungen für 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 geändert wurde (siehe umask(2)).

       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  Ausgabeoperation  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 fseek(3)- oder fgetpos-Operation zwischen Schreib- und  Leseoperationen  eines  solchen  Datenstroms
       einzuschieben.  Diese  Operation könnte der Aufruf eines scheinbaren Leerbefehls (wie z.B. fseek(..., 0L,
       SEEK_CUR), das für seinen synchroniserenden Nebeneffekt aufgerufen wird).

       Eine Datei im Anhänge-Modus zu öffnen (a  als  erstes  Zeichen  von  modus)  hat  zur  Folge,  dass  alle
       nachfolgenden  Schreiboperationen  in  diesen  Datenstrom am Dateiende erscheinen, als ob ihnen folgender
       Aufruf vorausgegangen wäre:

           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.

       Die  Funktionen  fopen(), fdopen() und freopen() können auch fehlschlagen und errno wegen Fehlern setzen,
       die für die Routine malloc(3)  spezifiziert sind.

       Die Funktion fopen() kann auch fehlschlagen und errno wegen Fehlern setzen, die für die  Routine  open(2)
       spezifiziert sind.

       Die Funktion fdopen() kann auch fehlschlagen und errno wegen Fehlern setzen, die für die Routine fcntl(2)
       spezifiziert sind.

       Die  Funktion  freopen()  kann  auch  fehlschlagen  und  errno wegen Fehlern setzen, die für die Routinen
       open(2), fclose(3) und fflush(3) spezifiziert sind.

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
       ┌──────────────────────────────┬───────────────────────┬─────────┐
       │ SchnittstelleAttributWert    │
       ├──────────────────────────────┼───────────────────────┼─────────┤
       │ fopen(), fdopen(), freopen() │ Multithread-Fähigkeit │ MT-Safe │
       └──────────────────────────────┴───────────────────────┴─────────┘

KONFORM ZU

       fopen(), freopen(): POSIX.1-2001, POSIX.1-2008, C89, C99.

       fdopen(): POSIX.1-2001, POSIX.1-2008.

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.

       Zusätzlich zu den vorhergehenden Zeichen unterstützen fopen() und freopen() die folgende Syntax in modus:

        ,ccs=zeichenkette

       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 zeichenkette um. Falls die Syntax ,ccs=zeichenkette  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.

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  4.04  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>.

GNU                                              8. August 2015                                         FOPEN(3)