open vs fopen en C
-
Utilice la función
fopen
para abrir o crear un archivo en C -
Utilice la función
open
para abrir o crear un archivo en C -
Utilice la función
creat
para abrir y crear un archivo
Este artículo demostrará varios métodos sobre el uso de funciones open
vs fopen
en C.
Utilice la función fopen
para abrir o crear un archivo en C
fopen
es la función de biblioteca estándar de C para manejar la apertura de archivos como objetos de flujo. En contraste con la función open
, que es intrínsecamente una llamada al sistema, fopen
asocia el objeto puntero FILE
al archivo dado. Se necesitan dos argumentos; el primero representa un nombre de ruta al archivo que se abrirá y el segundo argumento el modo en el que se abrirá el archivo.
Tenga en cuenta que fopen
tiene varios valores predefinidos para el parámetro de modo, todos los cuales se detallan en el manual de funciones página. En el siguiente código de ejemplo, especificamos el modo w +
, que abre el archivo para leer y escribir junto con truncar el contenido y posicionar el flujo al principio. Tenga en cuenta que si la ruta de la función dada no existe, la llamada crea un nuevo archivo para escribir.
#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);
}
Producción :
Done Writing!
Utilice la función open
para abrir o crear un archivo en C
Por el contrario, la función open
es esencialmente un servicio del sistema de nivel inferior llamado incluso cuando se utiliza fopen
. Tenga en cuenta que las llamadas al sistema generalmente se proporcionan a los usuarios finales con funciones de contenedor de la biblioteca C, pero sus características y casos de uso de rendimiento difieren de los de la biblioteca C stio
. P.ej. open
toma el segundo argumento como tipo int
y el tercer argumento opcional especifica los bits del modo de archivo cuando se crea un nuevo archivo. En el siguiente ejemplo, demostramos una funcionalidad similar a la del código de muestra anterior.
#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 llamada open
crea un nuevo descriptor de archivo y devuelve su valor a la persona que llama; de lo contrario, -1
se devuelve en caso de fallo y errno
se establece en consecuencia. El siguiente ejemplo de código muestra la llamada abierta
con el argumento de modo opcional que especifica S_IRWXU
. Estos símbolos son macros definidas en el encabezado <fcntl.h>
y denotan las diferentes banderas de permisos del archivo. S_IRWXU
implica que el propietario del archivo tendrá permisos de lectura/escritura/ejecución en un archivo recién creado.
#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);
}
Utilice la función creat
para abrir y crear un archivo
Otra llamada al sistema incluida con open
es la función creat
, que se puede utilizar específicamente para crear un nuevo archivo, o si el archivo ya existe, truncarlo a una longitud cero. Tenga en cuenta que esta función es esencialmente igual a la llamada open
con los siguientes argumentos: O_CREAT | O_WRONLY | O_TRUNC
. Por lo tanto, solo toma dos argumentos en comparación con abierto
, omitiendo el segundo argumento de banderas.
#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