fread_s

 

Publicado: julio de 2016

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Lee datos de la secuencia. Esta versión de fread presenta mejoras de seguridad, como se describe en características de seguridad de CRT.

size_t fread_s(   
   void *buffer,  
   size_t bufferSize,  
   size_t elementSize,  
   size_t count,  
   FILE *stream   
);  

Parámetros

buffer
Ubicación de almacenamiento de los datos.

bufferSize
Tamaño del búfer de destino en bytes.

elementSize
Tamaño del elemento que se va a leer en bytes.

count
Número máximo de elementos que se va a leer.

stream
Puntero a la estructura FILE .

fread_sDevuelve el número de (todo) de elementos que se leyeron en el búfer, que puede ser menor que count si se encuentra un error de lectura o el final del archivo antes de count se alcanza. Utilice la feof o ferror función distinguir un error de una condición de final de archivo. Si size o count es 0, fread_s devuelve 0 y el contenido del búfer es iguales. Si stream o buffer es un puntero nulo, fread_s invoca el controlador de parámetros no válidos, como se describe en validación del parámetro. Si la ejecución puede continuar, esta función establece errno en EINVAL y devuelve 0.

Para obtener más información acerca de los códigos de error, consulte _doserrno, errno, _sys_errlist y _sys_nerr.

El fread_s función lee hasta count elementos de elementSize bytes a partir de la entrada stream y los almacena en buffer. El puntero de archivo que está asociado a stream (si hay alguno) se incrementa el número de bytes leídos realmente. Si la secuencia dada se abre en modo de texto, pares de retorno de carro-avance de transporte se reemplazan por caracteres de salto de línea única. El reemplazo no tiene ningún efecto en el puntero de archivo o el valor devuelto. La posición del puntero de archivo es indeterminada si se produce un error. No se puede determinar el valor de un elemento de lectura parcialmente.

Esta función se bloquean otros subprocesos. Si necesita una versión de no bloqueo, utilice _fread_nolock.

FunciónEncabezado necesario
fread_s<stdio.h>

Para obtener más información sobre compatibilidad, vea Compatibilidad.

  
// crt_fread_s.c  
// Command line: cl /EHsc /nologo /W4 crt_fread_s.c  
//  
// This program opens a file that's named FREAD.OUT and  
// writes characters to the file. It then tries to open  
// FREAD.OUT and read in characters by using fread_s. If the attempt succeeds,  
// the program displays the number of actual items read.  
  
#include <stdio.h>  
  
#define BUFFERSIZE 30  
#define DATASIZE 22  
#define ELEMENTCOUNT 2  
#define ELEMENTSIZE (DATASIZE/ELEMENTCOUNT)  
#define FILENAME "FREAD.OUT"  
  
int main( void )  
{  
   FILE *stream;  
   char list[30];  
   int  i, numread, numwritten;  
  
   for ( i = 0; i < DATASIZE; i++ )  
      list[i] = (char)('z' - i);  
   list[DATASIZE] = '\0'; // terminal null so we can print it  
  
   // Open file in text mode:  
   if( fopen_s( &stream, FILENAME, "w+t" ) == 0 )  
   {  
      // Write DATASIZE characters to stream   
      printf( "Contents of buffer before write/read:\n\t%s\n\n", list );  
      numwritten = fwrite( list, sizeof( char ), DATASIZE, stream );  
      printf( "Wrote %d items\n\n", numwritten );  
      fclose( stream );  
   } else {  
      printf( "Problem opening the file\n" );  
      return -1;  
   }  
  
   if( fopen_s( &stream, FILENAME, "r+t" ) == 0 )   {  
      // Attempt to read in characters in 2 blocks of 11  
      numread = fread_s( list, BUFFERSIZE, ELEMENTSIZE, ELEMENTCOUNT, stream );  
      printf( "Number of %d-byte elements read = %d\n\n", ELEMENTSIZE, numread );  
      printf( "Contents of buffer after write/read:\n\t%s\n", list );  
      fclose( stream );  
   } else {  
      printf( "File could not be opened\n" );  
      return -1;  
   }  
}  

Contents of buffer before write/read:   
        zyxwvutsrqponmlkjihgfe  
  
Wrote 22 items  
  
Number of 11-byte elements read = 2  
  
Contents of buffer after write/read:   
        zyxwvutsrqponmlkjihgfe  
  

E/S de secuencia
fwrite
_read

Mostrar: