fread_s
Bir akıştan verileri okur. Bu sürümü, fread
CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmelerine sahiptir.
Sözdizimi
size_t fread_s(
void *buffer,
size_t bufferSize,
size_t elementSize,
size_t count,
FILE *stream
);
Parametreler
buffer
Verilerin depolama konumu.
bufferSize
Hedef arabelleğin bayt cinsinden boyutu.
elementSize
Bayt cinsinden okunacak öğenin boyutu.
count
Okunacak öğe sayısı üst sınırı.
stream
Yapı işaretçisi FILE
.
Dönüş değeri
fread_s
arabelleğe okunan (tam) öğelerin sayısını döndürür; bu, okuma hatasından veya dosyanın sonuna ulaşılmadan önce count
karşılaşıldığından daha count
az olabilir. feof
Bir hatayı dosya sonu koşulundan ayırmak için veya ferror
işlevini kullanın. veya size
count
0 ise, fread_s
0 döndürür ve arabellek içeriği değişmez. veya buffer
null bir işaretçiysestream
, fread_s
Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisini çağırır. Yürütmenin devam etmesi için izin verilirse, bu işlev olarak EINVAL
ayarlanır errno
ve 0 döndürür.
Hata kodları hakkında daha fazla bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Açıklamalar
işlevi girişten fread_s
stream
bayt öğelerine count
elementSize
kadar okur ve bunları içinde buffer
depolar. ile stream
ilişkili dosya işaretçisi (varsa) okunan bayt fread_s
sayısıyla gelişmiştir. Verilen akış metin modunda açılırsa, satır başı satır besleme çiftleri tek satır besleme karakterleriyle değiştirilir. Değiştirmenin dosya işaretçisi veya dönüş değeri üzerinde hiçbir etkisi yoktur. Bir hata oluşursa dosya işaretçisi konumu belirsizdir. Kısmen okunan bir öğenin değeri belirlenemiyor.
Bu işlev diğer iş parçacıklarını kilitler. Kilitlenmeyen bir sürüme ihtiyacınız varsa kullanın _fread_nolock
.
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Gereksinimler
İşlev | Gerekli başlık |
---|---|
fread_s |
<stdio.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// 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