Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Lê dados de um fluxo. Esta versão de fread tem aprimoramentos de segurança, conforme descrito em Recursos de segurança no CRT.
Sintaxe
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 ser lido em bytes.
count
Número máximo de itens a serem lidos.
stream
Ponteiro para a estrutura FILE.
Valor retornado
fread_s retorna o número de itens (inteiros) que foram lidos no buffer, que pode ser menor que count se ocorrer um erro de leitura ou se o final do arquivo for alcançado antes que count seja atingido. Use a função feof ou ferror para diferenciar um erro de uma condição de fim de arquivo. Se size ou count for 0, fread_s retornará 0 e o conteúdo do buffer permanecerá inalterado. Se stream ou buffer for 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 tiver permissão para continuar, essa função define errno como EINVAL e retorna 0.
Para obter mais informações sobre os códigos de erro, consulte errno, _doserrno, _sys_errlist e _sys_nerr.
Comentários
A função fread_s lê até count itens de elementSize bytes do stream de entrada e os armazena em buffer. O ponteiro de arquivo associado ( stream se houver) é avançado pelo número de bytes fread_s lidos. Se o fluxo em questão for aberto no modo de texto, os pares de alimentação de linha de retorno de carro serão substituídos por caracteres de alimentação de linha únicos. A substituição não interfere no ponteiro do arquivo ou no valor retornado. A posição do ponteiro do arquivo será indeterminada se ocorrer um erro. O valor de um item parcialmente lido não pode ser determinado.
Essa função bloqueia outros threads. Se for requerida uma versão sem bloqueio, use _fread_nolock.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Requisitos
| Função | Cabeçalho necessário |
|---|---|
fread_s |
<stdio.h> |
Para obter informações sobre 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;
}
}
Contents of buffer before write/read:
zyxwvutsrqponmlkjihgfe
Wrote 22 items
Number of 11-byte elements read = 2
Contents of buffer after write/read:
zyxwvutsrqponmlkjihgfe