fread_sfread_s

Lee datos desde una secuencia.Reads data from a stream. Esta versión de fread incluye mejoras de seguridad, tal y como se describe en Características de seguridad de CRT.This version of fread has security enhancements, as described in Security Features in the CRT.

SintaxisSyntax

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

ParámetrosParameters

búferbuffer
Ubicación de almacenamiento de los datos.Storage location for data.

bufferSizebufferSize
Tamaño del búfer de destino en bytes.Size of the destination buffer in bytes.

Elementos de elementoelementSize
Tamaño del elemento que se va a leer en bytes.Size of the item to read in bytes.

countcount
Número máximo de elementos que se va a leer.Maximum number of items to be read.

misionesstream
Puntero a la estructura FILE.Pointer to FILE structure.

Valor devueltoReturn Value

fread_s devuelve el número de elementos (completos) que se leyeron en el búfer, que puede ser menor que Count si se produce un error de lectura o el final del archivo antes de que se alcance el recuento .fread_s returns the number of (whole) items that were read into the buffer, which may be less than count if a read error or the end of the file is encountered before count is reached. Utilice la función feof o ferror para distinguir un error de una condición de final de archivo.Use the feof or ferror function to distinguish an error from an end-of-file condition. Si size o Count es 0, fread_s devuelve 0 y el contenido del búfer no cambia.If size or count is 0, fread_s returns 0 and the buffer contents are unchanged. Si la secuencia o el búfer es un puntero nulo, fread_s invoca el controlador de parámetros no válidos, tal y como se describe en validación de parámetros.If stream or buffer is a null pointer, fread_s invokes the invalid parameter handler, as described in Parameter Validation. Si la ejecución puede continuar, esta función establece errno en EINVAL y devuelve 0.If execution is allowed to continue, this function sets errno to EINVAL and returns 0.

Para obtener más información sobre códigos de error, consulte _doserrno, errno, _sys_errlist y _sys_nerr.For more information about error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

ObservacionesRemarks

La función fread_s lee hasta el recuento de elementos de los bytes del flujo de entrada y los almacena en el búfer.The fread_s function reads up to count items of elementSize bytes from the input stream and stores them in buffer. El puntero de archivo asociado a la secuencia (si hay alguno) se incrementa según el número de bytes leídos realmente.The file pointer that is associated with stream (if there is one) is increased by the number of bytes actually read. Si la secuencia especificada se abre en modo de texto, los pares de retorno de carro y avance de línea se reemplazan por caracteres de avance de línea.If the given stream is opened in text mode, carriage return-line feed pairs are replaced with single line feed characters. Este reemplazo no tiene ningún efecto en el puntero de archivo ni en el valor devuelto.The replacement has no effect on the file pointer or the return value. Si se produce un error, la posición del puntero de archivo es indeterminada.The file-pointer position is indeterminate if an error occurs. No se puede determinar el valor de un elemento leído parcialmente.The value of a partially read item cannot be determined.

Esta función bloquea otros subprocesos.This function locks out other threads. Si necesita una versión que no sea de bloqueo, use _fread_nolock.If you require a non-locking version, use _fread_nolock.

De forma predeterminada, el ámbito de este estado global de esta función es la aplicación.By default, this function's global state is scoped to the application. Para cambiar esto, vea estado global en CRT.To change this, see Global state in the CRT.

RequisitosRequirements

FunciónFunction Encabezado necesarioRequired header
fread_sfread_s <stdio.h><stdio.h>

Para obtener información adicional sobre compatibilidad, consulte Compatibilidad.For additional compatibility information, see Compatibility.

EjemploExample

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

Consulte tambiénSee also

E/S de secuenciaStream I/O
fwritefwrite
_read_read