fread
Bir akıştan verileri okur.
Sözdizimi
size_t fread(
void *buffer,
size_t size,
size_t count,
FILE *stream
);
Parametreler
buffer
Verilerin depolama konumu.
size
Bayt cinsinden öğe boyutu.
count
Okunacak öğe sayısı üst sınırı.
stream
Yapı işaretçisi FILE
.
Dönüş değeri
fread
işlevin okuduğu tam öğe sayısını döndürür; bu, bir hata oluşmasından veya dosya sonuna ulaşmadan count
önce dosya sonuyla karşılaşmasından daha az count
olabilir. Okuma hatasını feof
dosya sonu koşulundan ayırmak için veya ferror
işlevini kullanın. veya size
count
0 ise, fread
0 döndürür ve arabellek içeriği değişmez. veya buffer
null bir işaretçiysestream
, fread
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.
İade kodları hakkında daha fazla bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Açıklamalar
işlevi girişten fread
stream
bayt öğelerine count
size
kadar okur ve bunları içinde buffer
depolar. ile stream
ilişkilendirilmiş dosya işaretçisi (varsa) okunan bayt fread
sayısıyla gelişmiştir. Verilen akış metin modunda açılırsa, Windows stili yeni çizgiler Unix stili yeni satırlara dönüştürülür. Başka bir ifadeyle, satır başı besleme (CRLF) çiftleri tek satır besleme (LF) 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.
Metin modu akışında kullanıldığında, istenen veri miktarı (yani), size
* count
iç FILE
* arabellek boyutundan büyük veya buna eşitse (varsayılan olarak boyut 4096 bayttır, kullanılarak setvbuf
yapılandırılabilir), akış verileri doğrudan kullanıcı tarafından sağlanan arabelleğe kopyalanır ve bu arabellekte yeni satır dönüştürme yapılır. Dönüştürülen veriler arabelleğe kopyalanan akış verilerinden daha kısa olabileceğinden, [return_value
* size
] geçmiş buffer
veriler (buradan return_value
dönüş değeridirfread
) dosyasından dönüştürülmemiş veriler içerebilir. Bu nedenle, arabellek amacı C stili bir dize olarak davranacaksa [return_value
* size
] konumundaki karakter verilerini buffer
null sonlandırmanızı öneririz. Metin modunun ve ikili modun etkileri hakkında ayrıntılı bilgi için bkz fopen
.
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 |
<stdio.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// crt_fread.c
// This program opens a file named FREAD.OUT and
// writes 25 characters to the file. It then tries to open
// FREAD.OUT and read in 25 characters. If the attempt succeeds,
// the program displays the number of actual items read.
#include <stdio.h>
int main( void )
{
FILE *stream;
char list[30];
int i, numread, numwritten;
// Open file in text mode:
if( fopen_s( &stream, "fread.out", "w+t" ) == 0 )
{
for ( i = 0; i < 25; i++ )
list[i] = (char)('z' - i);
// Write 25 characters to stream
numwritten = fwrite( list, sizeof( char ), 25, stream );
printf( "Wrote %d items\n", numwritten );
fclose( stream );
}
else
printf( "Problem opening the file\n" );
if( fopen_s( &stream, "fread.out", "r+t" ) == 0 )
{
// Attempt to read in 25 characters
numread = fread( list, sizeof( char ), 25, stream );
printf( "Number of items read = %d\n", numread );
printf( "Contents of buffer = %.25s\n", list );
fclose( stream );
}
else
printf( "File could not be opened\n" );
}
Wrote 25 items
Number of items read = 25
Contents of buffer = zyxwvutsrqponmlkjihgfedcb