fopen, fopen_s
From cppreference.net
|
Definiert in Header
<stdio.h>
|
||
| (1) | ||
|
FILE
*
fopen
(
const
char
*
filename,
const
char
*
mode
)
;
|
(bis C99) | |
|
FILE
*
fopen
(
const
char
*
restrict
filename,
const
char
*
restrict
mode
)
;
|
(seit C99) | |
|
errno_t fopen_s
(
FILE
*
restrict
*
restrict
streamptr,
const
char
*
restrict
filename,
|
(2) | (seit C11) |
1)
Öffnet eine Datei, die durch
filename
angegeben wird, und gibt einen Zeiger auf den Dateistrom zurück, der dieser Datei zugeordnet ist.
mode
wird verwendet, um den Dateizugriffsmodus zu bestimmen.
2)
Gleich wie
(1)
, mit der Ausnahme, dass der Zeiger auf den Dateistrom in
streamptr
geschrieben wird und die folgenden Fehler zur Laufzeit erkannt werden und den aktuell installierten
constraint handler
aufrufen:
-
-
streamptrist ein Nullzeiger -
filenameist ein Nullzeiger -
modeist ein Nullzeiger
-
fopen_s
nur garantiert verfügbar, wenn
__STDC_LIB_EXT1__
durch die Implementierung definiert ist und wenn der Benutzer
__STDC_WANT_LIB_EXT1__
auf den Integer-Konstantenwert
1
setzt, bevor
<stdio.h>
eingebunden wird.
Inhaltsverzeichnis |
Parameter
| filename | - | Dateiname, der dem Dateistrom zugeordnet werden soll |
| mode | - | nullterminierte Zeichenkette, die den Dateizugriffsmodus bestimmt |
| streamptr | - | Zeiger auf einen Zeiger, in dem die Funktion das Ergebnis speichert (ein Out-Parameter) |
Dateizugriffsflags
|
Dateizugriffsmodus-String
|
Bedeutung | Erklärung |
Aktion, wenn Datei
bereits existiert |
Aktion, wenn Datei
nicht existiert |
|---|---|---|---|---|
| "r" | read | Datei zum Lesen öffnen | Lesen ab Anfang | Fehler beim Öffnen |
| "w" | write | Datei zum Schreiben erstellen | Inhalt zerstören | Neue Datei erstellen |
| "a" | append | An Datei anhängen | Schreiben am Ende | Neue Datei erstellen |
| "r+" | read extended | Datei zum Lesen/Schreiben öffnen | Lesen ab Anfang | Fehler |
| "w+" | write extended | Datei zum Lesen/Schreiben erstellen | Inhalt zerstören | Neue Datei erstellen |
| "a+" | append extended | Datei zum Lesen/Schreiben öffnen | Schreiben am Ende | Neue Datei erstellen |
|
Dateizugriffsmodus-Flag
"b"
kann optional angegeben werden, um eine Datei im Binärmodus zu öffnen. Dieses Flag hat keine Auswirkung auf POSIX-Systemen, aber unter Windows deaktiviert es die spezielle Behandlung von
'
\n
'
und
'
\x1A
'
.
Bei den Anhänge-Zugriffsmodi werden Daten unabhängig von der aktuellen Position des Dateipositionsindikators am Ende der Datei geschrieben. |
||||
| Das Verhalten ist undefiniert, wenn der Modus nicht einer der oben aufgeführten Strings ist. Einige Implementierungen definieren zusätzlich unterstützte Modi (z.B. Windows ). | ||||
| Im Aktualisierungsmodus ( '+' ) können sowohl Eingabe als auch Ausgabe durchgeführt werden, aber Ausgabe kann nicht von Eingabe gefolgt werden ohne einen zwischengeschalteten Aufruf von fflush , fseek , fsetpos oder rewind , und Eingabe kann nicht von Ausgabe gefolgt werden ohne einen zwischengeschalteten Aufruf von fseek , fsetpos oder rewind , es sei denn, der Eingabevorgang hat das Dateiende erreicht. Im Aktualisierungsmodus ist es Implementierungen erlaubt, den Binärmodus zu verwenden, selbst wenn der Textmodus angegeben ist. | ||||
| Dateizugriffsmodus-Flag "x" kann optional an "w" oder "w+" angehängt werden. Dieses Flag zwingt die Funktion zum Scheitern, wenn die Datei existiert, anstatt sie zu überschreiben. (C11) | ||||
| Bei Verwendung von fopen_s oder freopen_s verhindern Dateizugriffsberechtigungen für jede mit "w" oder "a" erstellte Datei den Zugriff durch andere Benutzer. Dateizugriffsmodus-Flag "u" kann optional jedem Specifier vorangestellt werden, der mit "w" oder "a" beginnt, um die Standard- fopen -Berechtigungen zu aktivieren. (C11) | ||||
Rückgabewert
1)
Bei Erfolg gibt die Funktion einen Zeiger auf den neuen Dateistrom zurück. Der Strom ist vollständig gepuffert, es sei denn,
filename
verweist auf ein interaktives Gerät. Im Fehlerfall wird ein Nullzeiger zurückgegeben.
POSIX erfordert
, dass in diesem Fall
errno
gesetzt wird.
2)
Bei Erfolg wird Null zurückgegeben und ein Zeiger auf den neuen Dateistrom wird in
*
streamptr
geschrieben. Bei Fehler wird ein Fehlercode ungleich Null zurückgegeben und der Nullzeiger in
*
streamptr
geschrieben (es sei denn,
streamptr
ist selbst ein Nullzeiger).
Hinweise
Das Format von
filename
ist implementierungsdefiniert und bezieht sich nicht notwendigerweise auf eine Datei (z.B. kann es die Konsole oder ein anderes über die Dateisystem-API zugängliches Gerät sein). Auf Plattformen, die diese unterstützen,
filename
kann absolute oder relative Dateisystempfade enthalten.
Beispiel
Diesen Code ausführen
#include <stdio.h> #include <stdlib.h> int main(void) { const char* fname = "/tmp/unique_name.txt"; // or tmpnam(NULL); int is_ok = EXIT_FAILURE; FILE* fp = fopen(fname, "w+"); if (!fp) { perror("File opening failed"); return is_ok; } fputs("Hello, world!\n", fp); rewind(fp); int c; // note: int, not char, required to handle EOF while ((c = fgetc(fp)) != EOF) // standard C I/O file reading loop putchar(c); if (ferror(fp)) puts("I/O error when reading"); else if (feof(fp)) { puts("End of file is reached successfully"); is_ok = EXIT_SUCCESS; } fclose(fp); remove(fname); return is_ok; }
Mögliche Ausgabe:
Hello, world! End of file is reached successfully
Referenzen
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.21.5.3 Die fopen-Funktion (S. 223-224)
-
- K.3.5.2.1 Die fopen_s-Funktion (S. 428-429)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.21.5.3 Die fopen-Funktion (S. 305-306)
-
- K.3.5.2.1 Die fopen_s-Funktion (S. 588-590)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.19.5.3 Die fopen-Funktion (S. 271-272)
- C89/C90 Standard (ISO/IEC 9899:1990):
-
- 4.9.5.3 Die fopen-Funktion
Siehe auch
|
schließt eine Datei
(Funktion) |
|
|
synchronisiert einen Ausgabestrom mit der tatsächlichen Datei
(Funktion) |
|
|
(C11)
|
öffnet einen bestehenden Strom mit einem anderen Namen
(Funktion) |
|
C++ documentation
für
fopen
|
|