open vs fopen in C
-
Usa la funzione
fopen
per aprire o creare un file in C -
Usa la funzione
open
per aprire o creare un file in C -
Usa la funzione
creat
per aprire e creare un file
Questo articolo mostrerà diversi metodi sull’utilizzo delle funzioni open
e fopen
in C.
Usa la funzione fopen
per aprire o creare un file in C
fopen
è la funzione della libreria standard C per gestire l’apertura dei file come oggetti stream. In contrasto con la funzione open
, che è intrinsecamente una chiamata di sistema, fopen
associa l’oggetto puntatore FILE
al file dato. Ci vogliono due argomenti; il primo rappresenta un percorso del file da aprire e il secondo argomento la modalità in cui aprire il file.
Notare che fopen
ha più valori predefiniti per il parametro mode, tutti dettagliati nel manuale delle funzioni pagina. Nel seguente codice di esempio, specifichiamo la modalità w+
, che apre il file per la lettura e la scrittura insieme al troncamento del contenuto e al posizionamento dello stream all’inizio. Si noti che se il percorso della funzione specificato non esiste, la chiamata crea un nuovo file per la scrittura.
#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);
}
Produzione:
Done Writing!
Usa la funzione open
per aprire o creare un file in C
Al contrario, la funzione open
è essenzialmente un servizio di sistema di livello inferiore chiamato anche quando viene utilizzato fopen
. Si noti che le chiamate di sistema vengono solitamente fornite agli utenti finali con funzioni wrapper della libreria C, ma le loro caratteristiche e casi d’uso delle prestazioni differiscono da quelli della libreria C stio
. Per esempio. open
accetta il secondo argomento come tipo int
e il terzo argomento opzionale che specifica i bit di modalità file quando viene creato un nuovo file. Nell’esempio seguente, dimostriamo la funzionalità simile come nel codice di esempio precedente.
#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);
}
La chiamata open
crea un nuovo descrittore di file e restituisce il suo valore al chiamante; altrimenti, -1
viene restituito in caso di fallimento e errno
viene impostato di conseguenza. Il prossimo esempio di codice mostra la chiamata open
con l’argomento modalità opzionale che specifica S_IRWXU
. Questi simboli sono macro definite nell’intestazione <fcntl.h>
e indicano i diversi flag di autorizzazione del file. S_IRWXU
implica che il proprietario del file avrà i permessi di lettura / scrittura / esecuzione su un file appena creato.
#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);
}
Usa la funzione creat
per aprire e creare un file
Un’altra chiamata di sistema inclusa con open
è la funzione creat
, che può essere usata specificatamente per creare un nuovo file, o se il file esiste già, troncarlo a lunghezza zero. Notare che questa funzione è essenzialmente uguale alla chiamata open
con i seguenti argomenti - O_CREAT | O_WRONLY | O_TRUNC
. Quindi, richiede solo due argomenti rispetto a open
, omettendo il secondo argomento flag.
#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