Compartir a través de


fread_s

Lee datos desde una secuencia. Esta versión de fread tiene mejoras de seguridad, como se describe en las Características de seguridad de CRT.

Sintaxis

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 .

Valor devuelto

fread_s devuelve el número de elementos (completos) que se han leído en el búfer, que puede ser menor que count si se encuentra un error de lectura o el final del archivo antes de llegar a count. Use la función feof o ferror para distinguir una condición de 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 queda sin cambios. 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 de parámetros. Si la ejecución puede continuar, esta función establece errno en EINVAL y devuelve 0.

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

Comentarios

La función fread_s lee hasta count elementos de elementSize bytes en la entrada stream y los almacena en buffer. El puntero de archivo asociado a stream (si hay uno) está avanzado por el número de bytes leídos fread_s . Si la secuencia especificada se abre en modo de texto, los pares de caracteres de retorno de carro-avance de línea se reemplazarán por caracteres individuales de avance de línea. Este reemplazo no tiene ningún efecto en el puntero de archivo ni en el valor devuelto. Si se produce un error, la posición del puntero de archivo es indeterminada. No se puede determinar el valor de un elemento de lectura parcial.

Esta función bloquea otros subprocesos. Si necesita una versión que no sea de bloqueo, use _fread_nolock.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Requisitos

Función Encabezado necesario
fread_s <stdio.h>

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

Ejemplo

// 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

Vea también

E/S de secuencia
fwrite
_read