open vs fopen in C
-
Verwendung von die Funktion
fopen
zum Öffnen oder Erstellen einer Datei in C -
Verwenden der Funktion
open
zum Öffnen oder Erstellen einer Datei in C -
Verwenden der Funktion
creat
zum Öffnen und Erstellen einer Datei
In diesem Artikel werden mehrere Methoden zur Verwendung der Funktionen open
vs fopen
in C vorgestellt.
Verwendung von die Funktion fopen
zum Öffnen oder Erstellen einer Datei in C
fopen
ist die Funktion der C-Standardbibliothek für die Handhabung des Öffnens von Dateien als Stream-Objekte. Im Gegensatz zur Funktion open
, die an sich ein Systemaufruf ist, verknüpft fopen
das Zeigerobjekt FILE
mit der angegebenen Datei. Es nimmt zwei Argumente entgegen; das erste stellt einen Pfadnamen zu der zu öffnenden Datei dar, und das zweite Argument den Modus, in dem die Datei geöffnet werden soll.
Beachten Sie, dass fopen
mehrere vordefinierte Werte für den Parameter mode hat, die alle im Funktionshandbuch Seite detailliert beschrieben sind. Im folgenden Beispielcode geben wir den Modus w+
an, der die Datei zum Lesen und Schreiben öffnet, den Inhalt abschneidet und den Stream am Anfang positioniert. Beachten Sie, dass der Aufruf eine neue Datei zum Schreiben erzeugt, wenn der angegebene Funktionspfad nicht existiert.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
const char* str = "Arbitrary string to be written to a file.\n";
int main(void) {
const char* filename = "innn.txt";
FILE* output_file = fopen(filename, "w+");
if (!output_file) {
perror("fopen");
exit(EXIT_FAILURE);
}
fwrite(str, 1, strlen(str), output_file);
printf("Done Writing!\n");
fclose(output_file);
exit(EXIT_SUCCESS);
}
Ausgabe:
Done Writing!
Verwenden der Funktion open
zum Öffnen oder Erstellen einer Datei in C
Im Gegensatz dazu ist die Funktion open
im Wesentlichen ein untergeordneter Systemdienst, der auch dann aufgerufen wird, wenn fopen
verwendet wird. Beachten Sie, dass Systemaufrufe den Endanwendern in der Regel mit Wrapper-Funktionen der C-Bibliothek zur Verfügung gestellt werden, aber ihre Eigenschaften und Leistungsverwendungsfälle unterscheiden sich von denen der C-Bibliothek stio
. Z.B. nimmt open
das zweite Argument als Typ int
und ein optionales drittes Argument, das die Dateimodus-Bits angibt, wenn eine neue Datei erstellt wird. Im folgenden Beispiel demonstrieren wir die ähnliche Funktionalität wie im vorherigen Beispielcode.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
const char* str = "Arbitrary string to be written to a file.\n";
int main(void) {
const char* filename = "innn.txt";
int fd = open(filename, O_RDWR | O_CREAT);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
write(fd, str, strlen(str));
printf("Done Writing!\n");
close(fd);
exit(EXIT_SUCCESS);
}
Der Aufruf open
erzeugt einen neuen Dateideskriptor und gibt dessen Wert an den Aufrufer zurück; andernfalls wird bei einem Fehler -1
zurückgegeben und errno
entsprechend gesetzt. Das nächste Codebeispiel zeigt den open
-Aufruf mit dem optionalen Modus-Argument, das S_IRWXU
angibt. Diese Symbole sind Makros, die im Header <fcntl.h>
definiert sind und die verschiedenen Berechtigungsflags der Datei bezeichnen. S_IRWXU
bedeutet, dass der Dateieigentümer Lese-, Schreib- und Ausführungsrechte für eine neu erstellte Datei hat.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
const char* str = "Arbitrary string to be written to a file.\n";
int main(void) {
const char* filename = "innn.txt";
int fd = open(filename, O_CREAT | O_WRONLY | O_APPEND, S_IRWXU);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
write(fd, str, strlen(str));
printf("Done Writing!\n");
close(fd);
exit(EXIT_SUCCESS);
}
Verwenden der Funktion creat
zum Öffnen und Erstellen einer Datei
Ein weiterer Systemaufruf, der in der Funktion open
enthalten ist, ist die Funktion creat
, die speziell dazu verwendet werden kann, eine neue Datei zu erstellen oder, wenn die Datei bereits existiert, auf die Länge Null abzuschneiden. Beachten Sie, dass diese Funktion im Wesentlichen dem Aufruf open
mit den folgenden Argumenten entspricht - O_CREAT | O_WRONLY | O_TRUNC
. Daher benötigt sie im Vergleich zu open
nur zwei Argumente, wobei das zweite Flags-Argument weggelassen wird.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
const char* str = "Arbitrary string to be written to a file.\n";
int main(void) {
const char* filename = "innn.txt";
int fd = creat(filename, S_IRWXG);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
write(fd, str, strlen(str));
printf("Done Writing!\n");
close(fd);
exit(EXIT_SUCCESS);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook