Standart C Programlama Dili


7.3. Rastgele Erişim

Normalde, bir dosya açıldıktan sonra, ilk okuma veya yazma işlemi dosyanın hemen başından yapılır. Bir sonraki işlem ise, en son işlem tarafından etkilenen son baytı izleyen bayttan başlayarak yapılır. Bundan dolayı, buna sıralı erişim denir. Bunu yapmadan, yani önceki baytları okuyup veya yazmadan, istediğimiz bir bayta ulaşmak (yani rastgele erişim yapmak) için fseek kullanırız:

fseek(dosya_gostergesi, uzun_sayi, nereden)

Yukarıdaki çağrıda ilk iki argümanın tipleri isimlerinden anlaşılabilir. nereden ise ya SEEK_SET (dosyanın başından), ya SEEK_CUR (şu anki konumundan) yada SEEK_END (dosyanın sonundan) olabilir. fseek işletildikten sonra dosya_gostergesi tarafından işaret edilen dosya üzerindeki okuma veya yazma nereden ile belirtilmiş yerden uzun_sayi mesafedeki bayttan başlıyacaktır. Eğer herhangi bir hata olursa, fseek sıfırdan farklı bir sayı döndürür, aksi takdirde 0 verir. Bir metin dosyasında bir karakterin konumunun hesaplanmasının anlamlı yada en azından taşınabilir bir özellik olmadığına dikkat edin; fseek tamamen ikili (ham) girdi/çıktı içindir.

Eğer, birtakım işlemlerden sonra, dosyanın başından kaç bayt ileride olduğunuzu öğrenmek isterseniz ftell kullanın:

uzun_sayi = ftell(dosya_gostergesi)

uzun_sayi’ya miktarı koyacaktır; eğer bir hata olursa -1L verecektir.

Sık sık dosyayı “geri sarmak”, yani başına fseek yapmak isteyebilirsiniz.

rewind(dosya_gostergesi)

bunu yapmanın kısa bir yoludur.