Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ fopen(3S) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

close(2)

creat(2)

dup(2)

open(2)

pipe(2)

write(2)

fclose(3S)

fseek(3S)

setbuf(3S)

stdio(3S)

lfs(5)

stdio(5)

fopen(3S)                                                         fopen(3S)

NAME
     fopen, freopen, fdopen, fopen64, freopen64 - Stream öffnen

SYNTAX
     #include <stdio.h>

     FILE *fopen(const char *filename, const char *type);

     FILE *freopen(const char *filename, const char *type, FILE *stream);

     FILE *fdopen(int dk, const char *type);

     FILE *fopen64(const char *filename, const char *mode);

     FILE *freopen64(const char *filename, const char *mode, FILE *stream);

BESCHREIBUNG
     fopen() öffnet die Datei mit dem Namen filename und liefert einen
     Dateizeiger zurück, der auf die filename zugeordnete FILE-Struktur
     zeigt. filename muß auf eine Zeichenkette zeigen, die den Namen der zu
     öffnenden Datei enthält. Die gewünschte Zugriffsart geben Sie mit der
     Zeichenkette type an. type kann folgende Werte annehmen:

     r oder rb         Datei zum Lesen öffnen

     w oder wb         Datei zum Schreiben auf die Länge 0 abschneiden oder
                       erstellen

     a oder ab         Anhängen; zum Schreiben am Ende der Datei öffnen
                       oder zum Schreiben erstellen

     r+, r+b oder rb+  Datei zum Aktualisieren öffnen (Lesen und Schreiben)

     w+, w+b oder wb+  Zum Aktualisieren abschneiden oder erstellen

     a+, a+b oder ab+  Anhängen; zum Aktualisieren am Dateiende öffnen oder
                       erstellen

     Das b wird in den obigen Typen ignoriert. Es ist dazu da, um binäre
     Dateien von Textdateien unterscheiden zu können. Es gibt jedoch auf
     einem Reliant UNIX-System keinen Unterschied zwischen diesen Dateity-
     pen.

     freopen() ersetzt die durch stream bezeichnete geöffnete Datei durch
     die Datei, auf deren Pfadnamen filename zeigt. Zuvor wird versucht,
     noch ungeschriebene Daten zu schreiben, dann wird die ursprüngliche
     Datei geschlossen, unabhängig davon, ob das Öffnen schließlich erfolg-
     reich ist. freopen() gibt einen Zeiger auf die FILE-Struktur zurück,
     die stream zugeordnet ist.






Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

fopen(3S)                                                         fopen(3S)

     freopen() wird normalerweise dazu verwendet, die Dateizeiger stdin,
     stdout und stderr anderen Dateien zuzuordnen als den voreingestellten,
     geöffneten Standarddateien. stderr ist standardmäßig nicht gepuffert,
     durch die Verwendung von freopen() wird stderr jedoch gepuffert oder
     zeilengepuffert.

     fdopen() verknüpft einen Stream mit einem Dateideskriptor. Dateide-
     skriptoren werden von open(), dup(), creat() oder pipe() geliefert.
     Diese Funktionen öffnen zwar die Dateien, es werden jedoch keine Zei-
     ger auf eine FILE-Struktur zurückgegeben. Fast alle der Bibliotheks-
     funktionen von 3S erwarten als Eingabe einen Stream. Der Stream-Typ
     muß mit der Zugriffsart der offenen Datei übereinstimmen. Der zu dem
     Stream gehörende Schreib-/Lesezeiger wird auf die Position gesetzt,
     die durch den Datei-Offset der zu dk gehörenden Datei angegeben ist.

     Wenn eine Datei zur Aktualisierung geöffnet wird, sind sowohl Ein- als
     auch Ausgabe auf dem sich ergebenden Stream zulässig. Jedoch darf der
     Ausgabe keine Eingabe direkt ohne ein dazwischengesetztes fflush(),
     fseek(), fsetpos() oder rewind() folgen, und der Eingabe darf keine
     Ausgabe direkt folgen ohne eingefügtes fseek(), fsetpos() oder
     rewind() oder einer Leseoperation, die auf das Dateiende trifft.

     Wenn eine Datei zum Anhängen geöffnet wird (d. h. wenn type a, ab, a+
     oder ab+ ist), ist ein Überschreiben der sich bereits in der Datei
     befindenden Daten unmöglich. fseek() kann zum Umsetzen des Schreib-
     /Lesezeigers auf eine beliebige Position in der Datei verwendet wer-
     den, jedoch wird der aktuelle Schreib-/Lesezeiger nicht beachtet, wenn
     eine Ausgabe in die Datei geschrieben wird. Alle Ausgaben werden an
     das Ende der Datei geschrieben und bewirken, daß der Schreib-/Lese-
     zeiger an das Ende der Ausgabe positioniert wird. Wenn zwei separate
     Prozesse dieselbe Datei zum Anhängen öffnen, kann jeder Prozeß unbe-
     hindert in die Datei schreiben, ohne daß ein Zerstören der vom anderen
     Prozeß geschriebenen Ausgabe zu befürchten ist. Die Ausgabe von den
     beiden Prozessen wird gemischt, in der Reihenfolge, in der sie
     geschrieben wird, an die Datei angehängt.

     Wenn ein Stream geöffnet ist, ist er dann, und zwar nur dann, voll-
     ständig gepuffert, wenn sichergestellt werden kann, daß er keine Ver-
     weise auf ein interaktives Gerät hat. Die Fehler- und Dateiendeanzei-
     ger werden beim Öffnen für den Stream zurückgesetzt.

     Der höchste in einem Objekt des Typs offt korrekt darstellbare Wert
     wird als das Offset-Maximum in der internen Beschreibung der offenen
     Datei festgelegt.

     Es besteht kein funktionaler Unterschied zwischen fopen()/freopen()
     und fopen64()/freopen64(), außer bei der Interpretation von off64t
     [siehe lfs(5)].






Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

fopen(3S)                                                         fopen(3S)

FEHLER
     Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
     Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
     errno(5).

     Die Funktion fopen() schlägt bei einer der folgenden Bedingungen fehl:

     EACCES        Eine Komponente des Pfadnamens darf nicht durchsucht
                   werden. Oder die Datei existiert und die durch type spe-
                   zifizierten Zugriffsrechte werden nicht gewährt, oder
                   die Datei existiert nicht und das übergeordnete Ver-
                   zeichnis der zu erstellenden Datei hat keine Schreiber-
                   laubnis.

     EINTR         Während der fopen()-Funktion wurde ein Signal empfangen.

     EISDIR        Die Datei ist ein Verzeichnis, und type verlangt
                   Schreiberlaubnis.

     EMFILE        Der Prozeß verwendet mehr als OPENMAX Dateideskriptoren
                   gleichzeitig.

     ENAMETOOLONG  Die Länge von filename überschreitet PATHMAX oder eine
                   Komponente des Pfadnamens ist größer als NAMEMAX.

     ENFILE        Die maximale Anzahl geöffneter Dateien ist erreicht. Es
                   können keine weiteren Dateien geöffnet werden.

     ENOENT        Die Datei existiert nicht oder filename weist auf eine
                   leere Zeichenkette.

     ENOSPC        Die Datei existiert nicht, und das Verzeichnis, in dem
                   eine neue Datei erstellt werden soll, kann nicht erwei-
                   tert werden.

     ENOTDIR       Eine Komponente des Pfadnamens ist kein Verzeichnis.

     ENXIO         Die Datei ist ein Gerät, auf das nicht zugegriffen wer-
                   den kann.

     EOVERFLOW     Die genannte Datei ist eine reguläre Datei, und die
                   Größe der Datei kann in einem Objekt des Typs offt
                   nicht korrekt dargestellt werden.

     EROFS         Die Datei befindet sich in einem Dateisystem, das nur
                   lesbar ist, type verlangt jedoch Schreibrechte.

     Die Funktion fopen() kann bei einer der folgenden Bedingungen fehl-
     schlagen:

     EINVAL        Der Wert des Arguments type ist ungültig.



Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

fopen(3S)                                                         fopen(3S)

     EMFILE        STREAMMAX Streams sind derzeit im aufrufenden Prozeß
                   geöffnet.

     ENAMETOOLONG  Die Auflösung des Pfadnamens eines symbolischen Links
                   hat ein Zwischenergebnis erzeugt, dessen Länge PATHMAX
                   überschreitet.

     ENOMEM        Es ist nicht genügend Speicherplatz verfügbar.

     ETXTBSY       Bei der Datei handelt es sich um eine reine Prozedurda-
                   tei (gemeinsam verwendete Textdatei), die nur ausgeführt
                   wird, und für type ist Schreibzugriff erforderlich.

     Die Funktion fdopen() kann bei folgender Bedingung fehlschlagen:

     EBADF         Das Argument dk ist kein gültiger Dateideskriptor.

     Die Funktion freopen() schlägt bei folgender Bedingung fehl:

     ENXIO         Bei der angegebenen Datei handelt es sich um eine
                   zeichen- oder blockorientierte Gerätedatei, und das die-
                   ser Datei zugeordnete Gerät existiert nicht.

     EOVERFLOW     Die genannte Datei ist eine reguläre Datei, und die
                   Größe der Datei kann in einem Objekt des Typs offt
                   nicht korrekt dargestellt werden.

ERGEBNIS
     Die Funktionen fopen() und freopen() geben einen Nullzeiger zurück,
     wenn auf filename nicht zugegriffen werden kann, type ungültig ist,
     oder die Datei nicht geöffnet werden kann.

     Die Funktion fdopen() gibt einen Nullzeiger zurück, wenn dk kein
     Dateideskriptor ist, der zu einer geöffneten Datei gehört, type ungül-
     tig ist, oder die Datei nicht geöffnet werden kann.

     Die Funktionen fopen() oder fdopen() können scheitern, ohne errno zu
     setzen, wenn es keine freien stdio(3S)-Streams gibt. Von fdopen() ver-
     wendete Dateideskriptoren müssen kleiner als 255 sein.

ANWENDUNGSZWECK
     STREAMMAX ist die Anzahl der Streams, die von einem Prozeß gleichzei-
     tig geöffnet sein können. Falls definiert, entspricht dieser Wert
     FOPENMAX.

SIEHE AUCH
     close(2), creat(2), dup(2), open(2), pipe(2), write(2), fclose(3S),
     fseek(3S), setbuf(3S), stdio(3S), lfs(5), stdio(5).






Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026