Provided by: manpages-de-dev_0.10-1_all bug

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