Definition | #include <stdio.h> FILE *fopen(const char *filename, const char *mode); | |||||||||||||||||||||||||||||||||||||||||
Beschreibung |
filename kann sein:
mode ist eine Zeichenkette, die die gewünschte Zugriffsart angibt und dafür einen der folgenden Werte annehmen:
Das Zeichen Wird eine Datei zum Anfügen geöffnet, d.h. mit Wird eine Datei zum Aktualisieren geöffnet, d.h. mit Auf eine Eingabeoperation darf nicht unmittelbar eine Ausgabeoperation folgen, ohne dass dazwischen eine der Funktionen zur Positionierung aufgerufen wurde, außer die Eingabeoperation hat das Dateiende erreicht. Ist ein Datenstrom geöffnet, so ist er genau dann vollständig gepuffert, wenn sichergestellt ist, dass er keine Verweise auf ein interaktives Gerät hat, z.B. Terminal. Die Kennzeichen für Dateiende und Fehler dieses Datenstroms werden gelöscht. Für die automatische Konvertierung darf das BS2000 Wenn BS2000-Dateien ausgeführt werden, ist Folgendes zu beachten: In mode können mit optionalen Zusatzangaben weitere Funktionen gesteuert werden:
Tabulatorzeichen (\t) In mode kann zusätzlich zur Zugriffsart eine Angabe zur Behandlung des Tabulatorzeichens (
Das Tabulatorzeichen wird in die entsprechende Anzahl Leerzeichen expandiert; Voreinstellung bei KR-Funktionalität (nur bei C/C++ Versionen kleiner V3 vorhanden).
Das Tabulatorzeichen wird nicht expandiert; Voreinstellung bei ANSI-Funktionalität. Last Byte Pointer (LBP) In mode kann kann zusätzlich zur Zugriffsart eine Angabe zur Behandlung des Last Byte Pointer (LBP) gemacht werden. Diese Angabe ist nur für Binärdateien mit Zugriffsart PAM relevant. Falls Beim Öffnen und Lesen einer bestehenden Datei wird der LBP unabhängig vom lbp-Schalter immer berücksichtigt:
"...,lbp=yes" Beim Schließen einer Datei, die verändert oder neu erstellt wurde, wird kein Marker geschrieben (auch wenn einer vorhanden war) und ein gültiger LBP gesetzt. Auf diese Weise können Dateien mit Marker auf LBP ohne Marker umgestellt werden.Bei NK-Dateien wird der letzte logische Block mit binären Nullen aufgefüllt, bei K-Dateien wird die Datei bis zum physikalischen Dateiende aufgefüllt. "...,lbp=no" Beim Schließen einer Datei, die neu erstellt wurde, wird der LBP auf Null (=ungültig) gesetzt. Es wird ein Marker geschrieben. Bei NK-Dateien wird der letzte logische Block mit binären Nullen aufgefüllt, bei K-Dateien wird die Datei bis zum physikalischen Dateiende aufgefüllt. Beim Schließen einer Datei, die verändert wurde, wird der LBP auf Null (=ungültig) gesetzt. Ein Marker wird nur dann geschrieben, wenn vorher bereits ein Marker vorhanden war. Falls die Datei beim Öffnen einen gültigen LBP besaß, wird kein Marker geschrieben, da in diesem Fall davon ausgegangen wird, dass kein Marker vorhanden ist. Bei NK-Dateien wird der letzte logische Block mit binären Nullen aufgefüllt, bei K-Dateien wird die Datei bis zum physikalischen Dateiende aufgefüllt. Wird der Schalter lbp nicht angegeben, hängt das Verhalten von der Umgebungsvariablen LAST_BYTE_POINTER ab (siehe auch Abschnitt "Umgebungsvariablen“):
Die Funktion verhält sich so, als ob
Die Funktion verhält sich so, als ob Split/Nosplit-Schalter Dieser Schalter steuert die Verarbeitung von Textdateien mit der Zugriffsart SAM und variabler Satzlänge, wenn zusätzlich eine maximale Satzlänge angegeben ist. "...,split=yes"
"...,split=no" Beim Lesen werden Sätze maximaler Länge nicht mit dem darauffolgenden Satz verkettet. Beim Schreiben mit einer der Funktionen Wird der Schalter nicht angegeben, gilt "...,split=yes". (Ende) Es besteht kein funktionaler Unterschied zwischen | |||||||||||||||||||||||||||||||||||||||||
Returnwert | Dateizeiger | bei Erfolg. | ||||||||||||||||||||||||||||||||||||||||
| Nullzeiger | wenn auf filename nicht zugegriffen werden kann, mode ungültig ist oder die Datei nicht geöffnet werden kann. | ||||||||||||||||||||||||||||||||||||||||
Fehler |
| |||||||||||||||||||||||||||||||||||||||||
| Für eine Komponete des Pfades existiert kein Durchsuchrecht. Die Datei existiert, und die für mode geltenden Zugriffrechte werden verweigert. Die Datei existiert nicht, und das übergeordnete Verzeichnis der zu erstellenden Datei hat kein Schreibrecht. | |||||||||||||||||||||||||||||||||||||||||
| Während des Systemaufrufs | |||||||||||||||||||||||||||||||||||||||||
| Der Wert des Arguments mode ist ungültig. | |||||||||||||||||||||||||||||||||||||||||
| Die angegebene Datei ist ein Dateiverzeichnis und mode verlangt Schreibrecht. | |||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||
Die Länge von filename überschreitet | ||||||||||||||||||||||||||||||||||||||||||
|
| Die maximale Anzahl von Dateien im System ist bereits geöffnet.. | ||||||||||||||||||||||||||||||||||||||||
|
| Die angegebene Datei existiert nicht, oder filename zeigt auf die leere Zeichenkette. | ||||||||||||||||||||||||||||||||||||||||
|
| Es ist nicht ausreichend Speicherplatz vorhanden. | ||||||||||||||||||||||||||||||||||||||||
|
| Die Datei existiert nicht, und das Dateiverzeichnis, in dem eine neue Datei erstellt werden soll, kann nicht erweitert werden. | ||||||||||||||||||||||||||||||||||||||||
|
| Eine Komponente des Pfades ist kein Dateiverzeichnis. | ||||||||||||||||||||||||||||||||||||||||
|
| Die angegebene Datei ist eine Gerätedatei für ein zeichen- oder blockorientiertes Gerät und das dieser Datei zugeordnete Gerät existiert nicht. | ||||||||||||||||||||||||||||||||||||||||
|
| Die angegebene Datei befindet sich in einem Dateisystem, das nur Leserecht hat, und mode verlangt Schreibrecht. | ||||||||||||||||||||||||||||||||||||||||
|
| Bei der Datei handelt es sich um eine reine Prozedurdatei (gemeinsam verwendete Textdatei), die nur ausgeführt wird und für | ||||||||||||||||||||||||||||||||||||||||
|
| Die genannte Datei ist eine reguläre Datei und die Größe der Datei kann in einem Objekt des Typs | ||||||||||||||||||||||||||||||||||||||||
Hinweise |
Ob BS2000 Der BS2000-Dateiname bzw. -Linkname kann in Klein- und Großbuchstaben geschrieben werden; er wird automatisch in Großbuchstaben umgesetzt. Durch die Angabe eines Systemdateien und ISAM-Dateien werden immer als Textdateien verarbeitet. Die Angabe des Binärmodus führt bei diesen Dateien zu einem Fehler beim Öffnen. (INCORE)- und PAM-Dateien werden immer als Binärdateien verarbeitet. Aus Kompatibilitätsgründen funktioniert das Öffnen als Binärdatei auch ohne explizite Angabe des Binärmodus. Wird eine nicht vorhandene Datei neu angelegt, dann wird standardmäßig eine Datei mit folgenden Attributen erzeugt:
Bei Verwendung eines Linknamens lassen sich mit dem In allen Fällen, in denen der alte Inhalt einer bereits existierenden Datei gelöscht wird (geöffnet zum Neuschreiben bzw. zum Neuschreiben und Lesen), bleiben die Katalogeigenschaften dieser Datei erhalten. Wenn eine Datei zum Aktualisieren geöffnet wird, kann das Lesen und Schreiben über denselben Dateizeiger erfolgen. Dennoch sollte auf eine Ausgabe nicht unmittelbar eine Eingabe folgen ohne ein vorhergehendes Positionieren Position des Lese-/Schreibzeigers im Anfügemodus(INCORE)-Dateien können nur zum Neuschreiben ( Eine Datei kann gleichzeitig für verschiedene Zugriffsmodi geöffnet werden, sofern diese Modi im BS2000-Datenverwaltungssystem miteinander verträglich sind. Startet ein Programm, werden ihm automatisch drei Dateizeiger wie folgt zugeordnet:
Es können maximal _NFILE-Dateien gleichzeitig geöffnet sein. _NFILE ist in Für das Öffnen von Dateien mit Satz-Ein-/Ausgabe wird mode um zwei Angaben erweitert. Diese Angaben folgen in der Zeichenkette hinter der Zugriffsart (s.o.), jeweils durch ein Komma getrennt:
Fehlt die Angabe von Fehlt die Angabe von Für die Satz-Ein-/Ausgabe gelten nachstehende Einschränkungen; werden diese Einschränkungen nicht eingehalten, wird die Datei nicht geöffnet und ein Fehler-Returnwert geliefert: Die Datei muss im Binärmodus geöffnet werden (Angabe
Bei ISAM-Dateien ist der Anfügemodus | |||||||||||||||||||||||||||||||||||||||||
Siehe auch |
|