Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Lê dados de um fluxo.Esta versão do fread tem aprimoramentos de segurança conforme descrito em Recursos de segurança no CRT.
size_t fread_s(
void *buffer,
size_t bufferSize,
size_t elementSize,
size_t count,
FILE *stream
);
Parâmetros
buffer
Local de armazenamento de dados.bufferSize
Tamanho do buffer de destino em bytes.elementSize
Tamanho do item a leitura em bytes.count
Número máximo de itens a serem lidos.stream
Ponteiro para FILE estrutura.
Valor de retorno
fread_sRetorna os números de (inteiro) itens que foram lidos no buffer, que pode ser menor do que count se um erro de leitura ou o fim do arquivo for encontrado antes count for atingido.Use o feof ou ferror função para distinguir um erro de uma condição de final de arquivo.Se size ou count é 0, fread_s retorna 0 e o conteúdo do buffer é inalterado.Se stream ou buffer é um ponteiro nulo, fread_s invoca o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro.Se a execução terá permissão para continuar, esta função define errno para EINVAL e retorna 0.
Para obter mais informações sobre códigos de erro, consulte _doserrno, errno, _sys_errlist e _sys_nerr.
Comentários
O fread_s função lê até count itens elementSize bytes de entrada stream e armazena-os em buffer.O ponteiro de arquivo associado com stream (se houver) é aumentado pelo número de bytes realmente lidos.Se determinado fluxo for aberto no modo de texto, os pares do carro e alimentação de linha são substituídos por caracteres de avanço de linha única.A substituição não tem efeito sobre o ponteiro do arquivo ou o valor de retorno.A posição do ponteiro de arquivo é indeterminada se ocorrer um erro.Não é possível determinar o valor de um item de leitura parcialmente.
Esta função bloqueia outros threads.Se você precisar de uma versão sem bloqueio, use _fread_nolock.
Requisitos
Função |
Cabeçalho necessário |
|---|---|
fread_s |
<stdio.h> |
Para obter informações adicionais de compatibilidade, consulte compatibilidade.
Exemplo
// 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;
}
}