Entrada/salida

Existen numerosas funciones para realizar operaciones de entrada/salida sobre ficheros. Las más usadas son:

En caso de que todo haya ido correcto en la operación esta función devuelve un 0, y si ha habido error  un -1.

 

Ejemplo_Fich_1. De manejo de ficheros. Este programa debe recibir 2 argumentos. El primero es un fichero de texto con cantidades reales. Lee esas cantidades y las almacena en formato float (binario) en el fichero incluido como segundo argumento. Cada valor leído es mostrado por pantalla usando fprintf para mostrar el uso del puntero a la salida estándar "stdout".

#include<stdio.h>

 

main (int argc, char **argv)

{

FILE *fpin, *fpout_fich, *fpout_std;

float dat;

int cont=0;

 

if (argc < 3)

  {

  fprintf (stderr,"ERROR numero de argumentos insuficiente\n");

  exit (1);

  }

 

if ( (fpin = fopen(argv[1], "r")) == NULL)

   {

   fprintf (stderr,"ERROR No se pudo abrir %s\n", argv[1]);

   exit (2);

   }

if ( (fpout_fich = fopen(argv[2], "wb")) == NULL)

   {

   fprintf (stderr,"ERROR No se pudo abrir %s\n", argv[2]);

   exit (2);

   }

fpout_std = stdout;

 

fscanf (fpin,"%f",&dat);

while (!feof(fpin))

  {

  if ( fwrite(&dat, sizeof(float), 1, fpout_fich) != 1)

    {

    fprintf(stderr, "ERROR al escribir dato %d en %s\n", cont, arg[2]);

    exit(3);

    }   

  fprintf (fpout_std,"Dato escrito %.2f\n",dat); // se muestra con 2 decimales

  fscanf (fpin,"%f",&dat);

  cont++;

 }

 

fclose (fpin);

fclose (fpout_fich);

return 0;

}

 

Ejercicio _Fich_1. Modificar la condición de finalización de lectura de fichero en el ejemplo anterior, usando el valor devuelto por fscanf().

Ejercicio_Fich_2. Modificar el ejemplo anterior de la siguiente manera: tras cerrar los dos ficheros, abrir el introducido como segundo argumento (el que hemos creado en binario) y leer los datos en él almacenados mostrándolos por pantalla, para ver que su contenido es correcto (el mismo que tenía el fichero de texto introducido como primer argumento).