fopen, fopen_s
Von de.cppreference.net
| Definiert in Header <stdio.h>
|
||
FILE* fopen( const char* filename, const char* mode );
|
(1) | (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,
const char* restrict mode );
|
(2) | (seit C11) |
1) Öffnet eine durch
filename angegebene Datei und gibt einen Zeiger auf den mit dieser Datei verbundenen Dateistrom zurück. mode wird verwendet, um den Dateizugriffsmodus zu bestimmen.2) Wie (1), außer dass der Zeiger auf den Dateistrom in
streamptr geschrieben wird und die folgenden Fehler zur Laufzeit erkannt werden und die derzeit installierte Constraint-Handler-Funktion aufrufen:
streamptrist ein Nullzeigerfilenameist ein Nullzeigermodeist ein Nullzeiger
fopen_s nur dann garantiert verfügbar, wenn __STDC_LIB_EXT1__ von der Implementierung definiert wird und der Benutzer __STDC_WANT_LIB_EXT1__ als ganzzahligen Konstanten 1 definiert, bevor er <stdio.h> einbindet.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 wird ein Zeiger auf den neuen Dateistrom zurückgegeben. Der Strom ist vollständig gepuffert, es sei denn,
filename bezieht sich auf ein interaktives Gerät. Bei einem Fehler wird ein Nullzeiger zurückgegeben. POSIX erfordert POSIX erfordert], dass errno in diesem Fall gesetzt wird.2) Bei Erfolg wird Null zurückgegeben und ein Zeiger auf den neuen Dateistrom in
*streamptr geschrieben. Bei einem Fehler wird ein Fehlercode ungleich Null zurückgegeben und der Nullzeiger in *streamptr geschrieben (es sei denn, streamptr ist selbst ein Nullzeiger).Anmerkungen
Das Format von filename ist implementierungsabhängig und bezieht sich nicht notwendigerweise auf eine Datei (z. B. kann es die Konsole oder ein anderes Gerät sein, das über die Dateisystem-API zugänglich ist). Auf Plattformen, die sie unterstützen, kann filename 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
- C23-Standard (ISO/IEC 9899:2024):
- 7.21.5.3 Die Funktion fopen (S.: TBD)
- K.3.5.2.1 Die Funktion fopen_s (S.: TBD)
- C17-Standard (ISO/IEC 9899:2018):
- 7.21.5.3 Die Funktion fopen (S.: 223-224)
- K.3.5.2.1 Die Funktion fopen_s (S.: 428-429)
- C11-Standard (ISO/IEC 9899:2011):
- 7.21.5.3 Die Funktion fopen (S.: 305-306)
- K.3.5.2.1 Die Funktion fopen_s (S.: 588-590)
- C99-Standard (ISO/IEC 9899:1999):
- 7.19.5.3 Die Funktion fopen (S.: 271-272)
- C89/C90-Standard (ISO/IEC 9899:1990):
- 4.9.5.3 Die Funktion fopen
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
|
|