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 origin
bayt 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 origin
bayt 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.H
tanı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. fseek
ve _fseeki64
dosya sonu göstergesini temizler ve ile stream
ilgili ö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ındanftell
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