Función fclose ANSI C

int fclose(FILE *stream);

El stream apuntado por stream será despejado y el fichero asociado, cerrado. Cualquier dato almacenado aún sin escribir para el stream será enviado al entorno local para ser escritos al fichero; cualquier dato almacenado aún sin leer será descartado. El stream es desasociado del fichero. Si el almacenamiento asociado fue automáticamente adjudicado, será desadjudicado.

Valor de retorno:

La función fclose retorna cero si el stream fue cerrado con éxito. Si se detectaron errores, entonces retorna EOF.

Ejemplo:

#include <stdio.h>

int main()
{
   FILE *fichero;
   char nombre[10] = "datos.dat";

   fichero = fopen( nombre, "w" );
   printf( "Fichero: %s -> ", nombre );
   if( fichero )
      printf( "creado (ABIERTO)\n" );
   else
   {
      printf( "Error (NO ABIERTO)\n" );
      return 1;
   }

   if( !fclose(fichero) )
      printf( "Fichero cerrado\n" );
   else
   {
      printf( "Error: fichero NO CERRADO\n" );
      return 1;
   }

   return 0;
}


suministrado por FreeFind
Valid HTML 4.0! Valid CSS!

Comentarios de los usuarios (2)

Marcelo
2020-02-16 18:21:59

Creo que aquí hay un error. Si fclose devuelve un valor distinto de cero(!fclose) significa que el fichero no se cerró. En el algoritmo está expresado al revés.

if(!fclose(fichero)

printf("fichero cerrado");

else

printf("fichero no cerrado");

Steven R. Davidson
2020-02-18 15:25:13

Hola Marcelo,

Invocando la función, 'fclose()', se retornará un entero. La expresión '!fclose()' aplica el operador ! a tal entero retornado por 'fclose()'. Esto implica que el entero retornado será interpretado como un valor booleano: cero es falso y cualquier otro entero es verdadero. Si 'fclose()' retorna cero, y por consiguiente se interpreta como "falso", entonces el operador ! negará el valor falso, resultando en un valor de "verdadero". Al final, la sentencia 'if' recibe este valor de "verdadero" y elige ejecutar su sentencia de mostrar el mensaje: "fichero cerrado".

Espero que esto aclare la duda.

Steven