fseek(), rewind(), ftell()

Kategori: C , 30 Haziran 2019 , JanFranco


Dosya üzerinde işlemler byte üzerinden sırayla yapılır. Burada denilmek istenen şudur, varsayalım ki bir dosyadan fgetc fonksiyonu ile karakterleri tek tek okuyoruz. Bu işlemi yaparken her bir karakter okuduktan sonra, file pointer bir sonraki karakteri işaret eder. Eğer müdahale edilmezse okuma baştan sona doğru olur. Müdahale edilmezse dememizin sebebi, müdahale edebiliyor olmamızdır. Bunu fseek ve rewind fonksiyonları ile yapabiliriz. Öncelikle fonksiyon prototiplerini verelim:


int fseek(FILE *stream, long offset, int whence);
void rewind(FILE *stream);
rewind fonksiyonu, file pointer'ın dosyanın başını işaret etmesini sağlar. Örneğin fputs fonksiyonu ile bir dosyaya bir takım veriler yazdık. File pointer artık yazdığımız yerin en sonunu işaret ediyor. rewind fonksiyonu ile tekrar başa dönebiliriz. Bu sefer bir takım veriler yazdığımızda, önceki yazdıklarımızın üstüne yazmış ouruz. rewind fonksiyonu pointer'ı başa alırken, fseek fonksiyonu pointer'ı istediğimiz yere alır. fseek fonksiyonunun prototipinde, üçüncü parametreye aşağıdaki değerleri gönderebiliriz:

SEEK_SET	->	Pointer dosyanın başını işaret eder
SEEK_CUR	->	Pointer olduğu yeri işaret eder, değişmez
SEEK_END	->	Pointer dosyanın sonunu işaret eder
fseek fonksiyonun ikinci parametresi ile daha çok manipülasyon yapabiliriz. Örnek verelim:

fseek(fp, 100, SEEK_SET);
fseek(fp, -30, SEEK_CUR);
fseek(fp, -10, SEEK_END);
fseek(fp, 0, SEEK_SET);
rewind(fp);
İlk satırda pointer'ı dosyanın başından itibaren 100 byte ileriye götürdük. İkinci satırda, pointer nereyi işaret ediyorsa, işaret ettiği kısımdan 30 byte geriye götürdük. Üçüncü satırda pointer'ı sondan 10. byte'a götürdük. 4. satırda ve 5. satırda yapılan işlem aynısıdır. İki işlem de pointer'ın dosyanın başını işaret etmesini sağlar. ftell() fonksiyonu ise, pointer'ın gösterdiği yerin offset bilgisini verir. Fonksiyon prototipini görelim:

long ftell(FILE *stream);
Direk örnek üzerinden görelim:

long pos;

pos = ftell(fp);

write_to_file(fp);

fseek(fp, pos, SEEK_SET);
Burada pos değişkenine, pointer nereyi gösteriyorsa o kısmın offset bilgisini yazdık. Daha sonra fonksiyona bir takım veriler yazan bir fonksiyonu çağırdık. Son olarak dosyanın başından itibaren pos değişkeninin değeri kadar ilerledik. Yani başlangıç noktamıza geri döndük.


Sonraki Yazı: ungetc()
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın