Provided by: manpages-de-dev_0.10-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  (Diesen  Sequenzen  können  zusätzliche
       Zeichen folgen.):

       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)  für  dessen
       synchroniserenden Nebeneffekt sein.

       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 der Aufruf

           fseek(stream,0,SEEK_END);

       vorausgegangen wäre.

       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.

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«-Operation  der  Thread-Annulierungspunkte  machen
              oder nachfolgende Lese- und Schreiboperationen.

       e (seit Glibc 2.7)
              die  Datei  mit dem Schalter O_CLOEXEC öffnen. Siehe open(2) für
              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 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.

SIEHE AUCH

       open(2), fclose(3), fileno(3), fmemopen(3), fopencookie(3)

KOLOPHON

       Diese   Seite   ist   Teil   der  Veröffentlichung  3.32  des  Projekts
       Linux-man-pages. Eine Beschreibung des Projekts und Informationen,  wie
       Fehler     gemeldet     werden     können,     finden     sich    unter
       http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick  Rother
       <krd@gulu.net> und Chris Leick <c.leick@vollbio.de> 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>.