08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

int setvbuf(FILE *stream, char *buf, int mode, size_t size);<br />

İşleve gönderilen üçüncü argüman tamponlama şeklini belirler. Üçüncü argümanın değeri<br />

stdio.h başlık dosyası içinde tanımlanan simgesel değişmezlerle belirlenir.<br />

_IOFBF (full buffering - tam tamponlama)<br />

Veri dosyaya tamponlama alanı dolduğunda yazılır. Ya da giriş tamponlaması söz konusu<br />

ise dosyadan okuma tamponlama alanı boş olduğu zaman yapılır.<br />

_IOLBF (line buffering - satır tamponlaması)<br />

Tamponlama alanı ile dosya arasındaki okuma ya da yazma işlemi satır satır yapılır.<br />

_IONBF (no buffering - tamponlama yok)<br />

Dosyadan okuma ya da soyaya yazma tamponlama olmadan doğrudan yapılır.<br />

setvbuf işlevine gönderilen ikinci argüman RAM'de tamponlamanın yapılacağı bloğun<br />

başlangıç adresidir. Tamponlamanın yapılacağı alan statik ya da dinamik ömürlü<br />

olabileceği gibi, dinamik bellek işlevleriyle de elde edilebilir.<br />

İşleve gönderilen son argüman tamponlama alanında tutulacak byte'ların sayısıdır.<br />

setvbuf işlevi dosya açıldıktan sonra, fakat dosya üzerinde herhangi biri işlem yapılmadan<br />

önce çağrılmalıdır. İşlevin başarılı olması durumunda işlev 0 değerine geri döner. İşleve<br />

gönderilen üçüncü argümanın geçersiz olması durumunda ya da işlevin ilgili<br />

tamponlamayı yapamaması durumunda, geri dönüş değeri sıfırdan farklı bir değer olur.<br />

İşleve gönderilen tampon alanının geçerliliğinin bitmesinden önce, yani ömrünün<br />

tamamlanmasından önce dosya kapatılmamalıdır.<br />

Dosyalarla İlgili İşlem Yapan İşlevlerin Yazımı<br />

Bir dosya ile ilgili işlem yapan bir işlev iki ayrı biçimde tasarlanabilir:<br />

1. İşlev çağrıldığında dosya açıktır. Bu durumda işlevin bir parametresi FILE * türünden<br />

olur. İşlev çağrılmadan önce, en son okuma işlemi mi yazma işlemi mi yapıldığı<br />

bilinemeyeceğinden, böyle bir işlev ilk işlem olarak dosya konum göstericisini<br />

konumlandırmalıdır. Aşağıdaki işlevleri inceleyin:<br />

481

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!