Standart C Programlama Dili


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 (getc, 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. fwrite ise bu işlemi ters yönde yapacaktır. Bu fonksiyonlar aktarılan nesne sayısını döndürürler; eğer bir hata olmuşsa, bu sayı sayi’dan az olacaktır.

Çok girdi/çı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/çı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) yada _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.