open vs fopen en C

Jinku Hu 12 octubre 2023
  1. Utilice la función fopen para abrir o crear un archivo en C
  2. Utilice la función open para abrir o crear un archivo en C
  3. Utilice la función creat para abrir y crear un archivo
open vs fopen en C

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);
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artículo relacionado - C File