fseek, _fseeki64

Dosya işaretçisini belirtilen konuma taşır.

Sözdizimi

int fseek(
   FILE *stream,
   long offset,
   int origin
);
int _fseeki64(
   FILE *stream,
   __int64 offset,
   int origin
);

Parametreler

stream
Yapı işaretçisi FILE .

offset
'den gelen originbayt sayısı.

origin
başlangıç konumu.

Dönüş değeri

Başarılı fseek olursa ve _fseeki64 0 döndürür. Aksi takdirde sıfır olmayan bir değer döndürür. Arama özelliği olmayan cihazlarda dönüş değeri tanımlanmamıştır. Null işaretçiyse stream veya aşağıda açıklanan izin verilen değerlerden biri değilseorigin, fseek _fseeki64 Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisini çağırın. Yürütmenin devam etmesi için izin verilirse, bu işlevler olarak EINVAL ayarlanır errno ve -1 döndürür.

Açıklamalar

fseek ve _fseeki64 işlevleri, ile stream ilişkilendirilmiş dosya işaretçisini (varsa) konumundan originbayt olan offset yeni bir konuma taşır. Akışta bir sonraki işlem yeni konumda gerçekleşir. Güncelleştirme için açık bir akışta, sonraki işlem okuma veya yazma olabilir. bağımsız değişkeni origin , içinde STDIO.Htanımlanan aşağıdaki sabitlerden biri olmalıdır:

kaynak değeri Anlamı
SEEK_CUR Dosya işaretçisinin geçerli konumu.
SEEK_END Dosya sonu.
SEEK_SET Dosyanın başlangıcı.

bir dosyanın herhangi bir yerinde işaretçiyi yeniden konumlandırmak için ve _fseeki64 kullanabilirsinizfseek. İşaretçi, dosyanın sonunun ötesine de konumlandırılabilir. fseekve _fseeki64 dosya sonu göstergesini temizler ve ile streamilgili önceki ungetc çağrıların etkisini azaltır.

Bir dosya veri eklemek için açıldığında, geçerli dosya konumu bir sonraki yazma işleminin gerçekleşeceği yere göre değil, son G/Ç işlemine göre belirlenir. Ekleme için açılan bir dosyada henüz G/Ç işlemi gerçekleşmediyse, dosya konumu dosyanın başlangıcıdır.

Satır başı besleme çevirileri beklenmeyen sonuçlara neden fseek olabileceği ve üretebileceği için metin modunda fseek açılan ve _fseeki64 _fseeki64 kullanımı sınırlı olan akışlar için. Metin modunda açılan akışlarda çalışması garanti edilen tek fseek ve _fseeki64 işlemleri şunlardır:

  • Kaynak değerlerden herhangi birine göre 0 uzaklığıyla arama.

  • kullanırken veya _ftelli64 kullanırken _fseeki64çağrısından ftell fseek döndürülen bir uzaklık değeriyle dosyanın başından aranma.

Ayrıca metin modunda CTRL+Z, girişte dosya sonu karakteri olarak yorumlanır. Okuma/yazma için açılan dosyalarda ve ilgili tüm yordamlarda, fopen dosyanın sonunda CTRL+Z tuşlarına basıp mümkünse kaldırın. CTRL+Z ile biten bir dosyanın içinde hareket etmek ve ftell veya _ftelli64_fseeki64 birleşimini fseek kullanmak dosyanın sonuna yakın bir yere doğru düzgün davranmanıza neden fseek _fseeki64 olabileceğinden kaldırılır.

CRT Bayt Sipariş İşareti (BOM) ile başlayan bir dosyayı açtığında, dosya işaretçisi ürün reçetesinden sonra konumlandırılır. (Yani, dosyanın gerçek içeriğinin başında konumlandırılır). Dosyanın başına kadar gitmek fseek zorundaysanız, ilk konumu almak için kullanın ftell ve ardından fseek 0 yerine bu konuma gidin.

Bu işlev yürütme sırasında diğer iş parçacıklarını kilitler ve bu nedenle iş parçacığı güvenlidir. Kilitlenmeyen bir sürüm için bkz _fseek_nolock. , _fseeki64_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
fseek <stdio.h>
_fseeki64 <stdio.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// crt_fseek.c
// This program opens the file FSEEK.OUT and
// moves the pointer to the file's beginning.

#include <stdio.h>

int main( void )
{
   FILE *stream;
   char line[81];
   int  result;

   if ( fopen_s( &stream, "fseek.out", "w+" ) != 0 )
   {
      printf( "The file fseek.out was not opened\n" );
      return -1;
   }
   fprintf( stream, "The fseek begins here: "
                    "This is the file 'fseek.out'.\n" );
   result = fseek( stream, 23L, SEEK_SET);
   if( result )
      perror( "Fseek failed" );
   else
   {
      printf( "File pointer is set to middle of first line.\n" );
      fgets( line, 80, stream );
      printf( "%s", line );
    }
   fclose( stream );
}
File pointer is set to middle of first line.
This is the file 'fseek.out'.

Ayrıca bkz.

Akış G/Ç
fopen, _wfopen
ftell, _ftelli64
_lseek, _lseeki64
rewind