Aracılığıyla paylaş


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

freadiş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_errlistve _sys_nerr.

Açıklamalar

işlevi girişten fread stream bayt öğelerine count size kadar okur ve bunları içinde bufferdepolar. 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 * countFILE * arabellek boyutundan büyük veya buna eşitse (varsayılan olarak boyut 4096 bayttır, kullanılarak setvbufyapı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ş bufferveriler (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 buffernull 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

Ayrıca bkz.

Akış G/Ç
Metin ve ikili mod dosyası G/Ç
fopen
fwrite
_read