7.4. Dosyalarla İlgili Başka Bilgiler
Okuma
fonksiyonları veya makrolarının
okuduğu şey ungetc
tarafından etkilenebilir.
ungetc(kar, dosya_gostergesi)
çağrısı, dosya_gostergesi
ile işaret
edilen dosyadan yapılacak bir sonraki okuma işlemi (fgetc
,
fgets
, fscanf
vs.) tarafından dosyada var olan
karakterlerden önce kar
’da verilen karakterin
okunmasını sağlar. ungetc
ile okuma işlemi arasında
fseek
yapılırsa, ungetc
ile saklanan karakter
unutulacaktır. ungetc
isminin aslında biraz yanıltıcı olmasına
rağmen, ungetc
genelde okunmaması gerekirken okunmuş bir
karakterin sanki okunmamış gibi geri alınmasını sağlar. Her dosya için,
en fazla bir karakter bu şekilde geri konabilir. ungetc
işlemi
başarısız olursa EOF
döndürülür.
Dosyaları oluşturduğunuz gibi onları silebilirsiniz de. Dosyanın
ismi dosya_adi
ise, o zaman
remove(dosya_adi)
yazın. Dosya bu altdizinden silinmiş
olacaktır. Eğer dosyanın ait olduğu tek altdizin bu ise dosya sistemden
tamamen silinecektir. (Bir altdizin başka altdizin veya dosya isimleri
içerebilen bir rehber olarak düşünülebilir.) Eğer işlem başarılı ise
remove
0
döndürecektir.
Buna benzer olarak, bir dosyanın adını değiştirmek istiyorsanız.
rename(eski_dosya_adi, yeni_dosya_adi)
kullanın.
Bilgi öbekleri okumak veya yazmak için iki yararlı fonksiyon vardır:
fread(gosterge, boy, sayi, dosya_gostergesi)
ve
fwrite(gosterge, boy, sayi, dosya_gostergesi)
fread
, dosya_gostergesi
tarafından işaret edilen dosyadan gosterge
ile işaret
edilen diziye boy
uzunluğunda sayi
kadar
nesne aktaracaktır. Okuma yerine yazma işlemi için fwrite
fonksiyonu kullanılır. Bu fonksiyonlar aktarılan nesne sayısını döndürürler;
eğer bir hata oluşmuşsa, bu sayı sayi
’dan az
olacaktır.
Çok girdi ve çıktı, örneğin bir aktarma işlemi yapan bir program
dosyalar için büyük tampon bölgeleri kullanırsa kazançlı çıkacaktır. Tamponlu
girdi ve çıktı yapmak için standart kütüphane iki fonksiyon sağlamaktadır. Bunlar
fopen
’dan hemen sonra çağrılmalıdır.
setbuf(dosya_gostergesi, tampon)
fonksiyonu, normalde
char tampon [BUFSIZ];
olarak tanımlanması gereken tampon
dizisini
dosya için tampon bölge haline getirir. BUFSIZ
stdio.h
dosyasında tanımlanmış olan uygun bir
değişmezdir. Eğer tampon
yerine NULL
verirsek,
tamponlama ortadan kalkar.
Tampon boyunun kullanıcı tarafından belirlendiği daha iyi bir fonksiyon ise şöyledir:
setvbuf(dosya_gostergesi, tampon, mod, tampon_boyu)
Burada, mod
ya _IOFBF
(tam tamponlama), ya _IOLBF
(metin dosyaları için satır
tamponlama) ya da _IONBF
(tamponlamanın kaldırılması) olabilir.
Eğer tampon
NULL
ise tampon_boyu
boyundan bir tampon bölgesi setvbuf
tarafından ayrılacaktır.
İşlem başarılı ise, bu fonksiyon 0
döndürür.
Son olarak,
fflush(dosya_gostergesi)
fonksiyonu, tamponda bilgi varsa, bunun
dosyaya aktarılmasını sağlar. Sadece bir çıktı dosyası için
kullanılabilir ve bir hata durumunda EOF
, aksi
durumda 0
döndürür.