Dosyalarda Konumlama
Önceki XII. Oylum - Akımlar Üzerinde Giriş/Çıkış Sonraki
Dosyalarda Konumlama
Bir akım üzerinde dosya konumlama, akımın dosyanın neresinde okuma veya yazma yaptığı ile ilgilidir. Akım üzerinde G/Ç, dosya üzerinde dosya konumlamayı ilerletir. GNU sisteminde, dosya konumu bir tamsayı ile ifade edilir ve dosyanın başlangıcından itibaren bayt sayısını gösterir. Bkz. Dosyada Konumlama.
Sıradan bir disk dosyasında yapılan G/Ç işlemlerinde, dosyanın istediğiniz bir bölümüne okuma veya yazma amacıyla dosya konumunu istediğiniz gibi değiştirebilirsiniz. Diğer bazı dosya çeşitlerinde de buna izin verilebilmektedir. Dosya konumu değiştirmeyi destekleyen dosyalara kimi zaman rasgele erişimli dosyalar da denir.
Bu bölümdeki işlevleri bir akım ile ilişkilendirilmiş dosya konumlayıcıyı değiştirmek ya da durumunu saptamak amacıyla kullanabilirsiniz. Aşağıda listelenen semboller stdio.h başlık dosyasında bildirilmiştir.
long int ftell
(FILE *akım)
işlev
Bu işlev akım akımının o andaki dosya konumu ile döner.
Bu işlev, eğer akım dosya konumlamayı desteklemiyorsa veya dosya konumu bir long int ile ifade edilemiyorsa ve olası diğer sebeplerle başarısız olabilir. Bir başarısızlık durumunda -1 ile döner.
off_t ftello
(FILE *akım)
işlev
ftello işlevi off_t türünden bir dosya konumu ile dönmesi dışında ftell işlevi gibidir. POSIX belirtimi tarafından kullanılan long int'in aksine, bu veri türünü destekleyen sistemler, tüm dosya konumlarını açıklamakta onu kullanırlar. Bu ikisinin aynı boyutta olması gerekli değildir. Bu nedenle, gerçekleme, tepede POSIX uyumlu düşük seviyeli bir G/Ç gerçeklemesi olarak yazılmışsa ftell kullanımı bazı sorunlara yolaçabilir, bu durumda mümkün olduğunca ftello kullanımı tercih edilir.
Bu işlev başarısız olduğunda (off_t) -1 ile döner. Bu, dosya konumlama desteği olmamasından ya da bir dahili hatanın sonucu olabilir. Aksi takdirde, dönüş değeri o anki dosya konumudur.
Bu işlev Tek Unix Belirtiminin 2. sürümünde tanımlı bir genişletmedir.
Kaynaklar, 32 bitlik sistemlerde _FILE_OFFSET_BITS == 64 ile derlendiğinde bu işlev ftello64 olarak davranır. Yani büyük dosya desteği arayüzü şeffaf olarak eski arayüzle yer değiştirir.
off64_t ftello64
(FILE *akım)
işlev
Bu işlev dönüş değerinin off64_t türünde olması dışında ftello gibidir. Bu ayrıca, akım akımının, 231 baytlık sınırın üzerindeki dosya konumlarına konumlayan dosya işlemlerinin başarılı olabildiği fopen64, freopen64 veya tmpfile64 işlevlerinin kullanılarak açılmasını gerektirir.
Kaynaklar, 32 bitlik sistemlerde _FILE_OFFSET_BITS == 64 ile derlendiğinde bu işlev ftello ismiyle de kullanılabilir. Yani büyük dosya desteği arayüzü şeffaf olarak eski arayüzle yer değiştirir.
int fseek
(FILE    *akım,
 long int konum,
 int      nereden)
işlev
fseek işlevi akım akımının dosya konumunu değiştirmekte kullanılır. nereden parametresinin değeri, konum değerinin dosyanın başlangıcına mı, o anki dosya konumuna göre mi yoksa dosyanın sonuna göre mi konumlanacağına bağlı olarak sırasıyla SEEK_SET, SEEK_CUR ya da SEEK_END sabitlerinden biri olmalıdır.
Eğer işlem başarılı olursa dönüş değeri sıfırdır. Sıfırdan farklı bir dönüş değeri işlemin başarısız olduğunu gösterir. Bir başarılı çağrı ayrıca akım akımının dosyasonu göstergesini temizler ve ungetc kullanımıyla "geriye basılan" karakterleri iptal eder.
fseek dosya konumunu değiştirmeden önce tamponlanmış çıktıyı ya boşaltır ya da aksine daha sonra dosyadaki yerine yazılmak üzere onu hatırlar.
int fseeko
(FILE *akım,
 off_t konum,
 int   nerden)
işlev
Bu işlev fseek işlevi gibidir, ancak POSIX türleri kullanılan sistemlerde fseek kullanımından kaynaklanan bir sorunu düzeltir. Konum için long int türünde bir değerin kullanılması POSIX ile uyumlu değildir. fseeko işlevi konum parametresi için doğru tür olan off_t türünü kullanır.
Bu sebeple, işlevselliği ilgili tanımlamaya daha yakın olduğundan (tamamen farklı bile olsa) mümkünse ftello kullanımı tercih edilmelidir.
İşlevsellik ve dönüş değeri fseek ile aynıdır.
Bu işlev Tek Unix Belirtiminin 2. sürümünde tanımlı bir genişletmedir.
Kaynaklar, 32 bitlik sistemlerde _FILE_OFFSET_BITS == 64 ile derlendiğinde bu işlev fseeko64 olarak davranır. Yani büyük dosya desteği arayüzü şeffaf olarak eski arayüzle yer değiştirir.
int fseeko64
(FILE   *akım,
 off64_t konum,
 int     nereden)
işlev
Bu işlev dönüş değerinin off64_t türünde olması dışında fseeko gibidir. Bu ayrıca, akım akımının, 231 baytlık sınırın üzerindeki dosya konumlarına konumlayan dosya işlemlerinin başarılı olabildiği fopen64, freopen64 veya tmpfile64 işlevlerinin kullanılarak açılmasını gerektirir.
Kaynaklar, 32 bitlik sistemlerde _FILE_OFFSET_BITS == 64 ile derlendiğinde bu işlev fseeko ismiyle de kullanılabilir. Yani büyük dosya desteği arayüzü şeffaf olarak eski arayüzle yer değiştirir.
Uyumluluk Bilgisi:
POSIX dışı sistemlerde ftell, ftello, fseek ve fseeko işlevleri sadece ikilik akımlarla düzgün çalışabilir. Bkz. İkilik ve Metin Akımları.
Aşağıdaki sembolik sabitler fseek. işlevinin nereden argümanında kullanmak için tanımlanmışır. Bunlar ayrıca, lseek işleviyle kullanmak (Girdi ve Çıktı İlkelleri) ve dosya kilitleri için konum belirtmek (Dosyalar Üzerindeki Denetim İşlemleri) için de kullanılır.
int SEEK_SET
makro
Bu tamsayı sabit, fseek veya fseeko işlevinin nereden argümanında dosyanın başlangıcına göre konum belirtmek için kullanılır.
int SEEK_CUR
makro
Bu tamsayı sabit, fseek veya fseeko işlevinin nereden argümanında dosyanın o anki dosya konumuna göre konum belirtmek için kullanılır.
int SEEK_END
makro
Bu tamsayı sabit, fseek veya fseeko işlevinin nereden argümanında dosyanın sonuna göre konum belirtmek için kullanılır.
void rewind
(FILE *akım)
işlev
rewind işlevi akım akımını dosyanın başlangıcına konumlar. fseek veya fseeko işlevinin nereden argümanında SEEK_SET ve konum argümanında 0L belirtilerek çağrılmasına eşdeğerdedir. Bu işlevlerin aksine dönüş değeri yoktur ve akımın hata göstergesi de sıfırlanır.
Eski BSD sistemleri ile uyumluluk adına SEEK_… sabitlerine karşılık olarak aşağıdaki sabitler de desteklenmektedir. Bu sabitler iki farklı başlık dosyasında tanımlıdır: fcntl.h ve sys/file.h.
L_SET
SEEK_SET ile aynıdır.
L_INCR
SEEK_CUR ile aynıdır.
L_XTND
SEEK_END ile aynıdır.
Önceki Üst Ana Başlık Sonraki
İkilik ve Metin Akımları Başlangıç Taşınabilir Dosya Konumlama İşlevleri
Bir Linux Kitaplığı Sayfası