open vs fopen en C
-
Utilisez la fonction
fopen
pour ouvrir ou créer un fichier en C -
Utilisez la fonction
open
pour ouvrir ou créer un fichier en C -
Utilisez la fonction
creat
pour ouvrir et créer un fichier
Cet article présente plusieurs méthodes d’utilisation des fonctions open
vs fopen
en C.
Utilisez la fonction fopen
pour ouvrir ou créer un fichier en C
fopen
est la fonction de bibliothèque standard C pour gérer l’ouverture des fichiers en tant qu’objets de flux. Contrairement à la fonction open
, qui est intrinsèquement un appel système, fopen
associe l’objet pointeur FILE
au fichier donné. Cela prend deux arguments; le premier représente un chemin vers le fichier à ouvrir, et le second argument le mode dans lequel ouvrir le fichier.
Notez que fopen
a plusieurs valeurs prédéfinies pour le paramètre mode, qui sont toutes détaillées dans le manuel des fonctions page. Dans l’exemple de code suivant, nous spécifions le mode w +
, qui ouvre le fichier en lecture et en écriture, en tronquant le contenu et en positionnant le flux au début. Notez que si le chemin de fonction donné n’existe pas, l’appel crée un nouveau fichier à écrire.
#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);
}
Production:
Done Writing!
Utilisez la fonction open
pour ouvrir ou créer un fichier en C
En revanche, la fonction open
est essentiellement un service système de niveau inférieur appelé même lorsque fopen
est utilisé. Notez que les appels système sont généralement fournis aux utilisateurs finaux avec les fonctions d’encapsulation de la bibliothèque C, mais leurs caractéristiques et leurs performances d’utilisation diffèrent de celles de la bibliothèque C stio
. Par exemple. open
prend le deuxième argument comme type int
et le troisième argument facultatif spécifiant les bits du mode fichier lorsqu’un nouveau fichier est créé. Dans l’exemple suivant, nous démontrons la fonctionnalité similaire à celle de l’exemple de code précédent.
#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);
}
L’appel open
crée un nouveau descripteur de fichier et renvoie sa valeur à l’appelant; sinon, -1
est renvoyé en cas d’échec et errno
est défini en conséquence. L’exemple de code suivant montre l’appel open
avec l’argument de mode optionnel spécifiant S_IRWXU
. Ces symboles sont des macros définies dans l’en-tête <fcntl.h>
et désignent les différents drapeaux d’autorisation du fichier. S_IRWXU
implique que le propriétaire du fichier aura des autorisations de lecture/écriture/exécution sur un fichier nouvellement créé.
#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);
}
Utilisez la fonction creat
pour ouvrir et créer un fichier
Un autre appel système inclus avec open
est la fonction creat
, qui peut être spécifiquement utilisée pour créer un nouveau fichier, ou si le fichier existe déjà, le tronquer à une longueur nulle. Notez que cette fonction est essentiellement égale à l’appel open
avec les arguments suivants - O_CREAT | O_WRONLY | O_TRUNC
. Ainsi, il ne prend que deux arguments par rapport à open
, en omettant le second argument flags.
#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