Tamponlama Çeşidinin Seçimi
Önceki Akım Tamponlama Sonraki
Tamponlama Çeşidinin Seçimi
Bir akım açıldıktan sonra (ancak henüz başka hiçbir işlem yapılmadan), hangi tamponlama çeşidini kullanacağınızı setvbuf işlevini kullanarak belirtebilirsiniz. Bu bölümde sözü edilen oluşumlar stdio.h başlık dosyasında bildirilmiştir.
int setvbuf
(FILE  *akım,
 char  *tampon,
 int    kip,
 size_t boyut)
işlev
Bu işlev ile akım akımının hangi tamponlama kipini kullanacağı belirtilir. kip parametresinde, akımın tümünün tamponlanması isteniyorsa _IOFBF, satır tamponlu olması isteniyorsa _IOLBF, girdi/çıktının tamponlanması istenmiyorsa _IONBF sabiti kullanılır.
tampon argümanına boş gösterici belirtilirse, işlev malloc kullanarak tamponu kendisi ayırır. Akımı serbest bıraktığınızda bu tamponu da serbest bırakmış olacaksınız.
Aksi takdirde, tampon en az boyut karakterlik bir karakter dizisini tutacak büyüklükte seçilmelidir. Akım açık olduğu sürece ve bu dizi akım tamponunda kaldığı sürece, dizi akım tarafından kullanılıyor olacağından diziye ayrılan alanı bu süre zarfında serbest bırakmamalısınız. Tamponu ya durağan olarak ya da malloc (Özgür Bellek Ayırma) kullanarak ayırmalısınız. Dizinin bildirildiği blok çıkmadan önce dosyayı kapatmadıkça özdevinimli bir dizinin kullanılması önerilmez.
Dizi bir akım tamponu olarak kaldığı sürece, akım G/Ç işlevleri dahili amaçları için tamponu kullanacaklardır. Akım diziyi tamponlama amacıyla kullanırken dizinin içeriğine doğrudan erişmeyi denememelisiniz.
setvbuf işlevi başarılı olduğunda sıfır ile döner. kip değeri geçersizse ya da istek yerine getirilememişse sıfırdan farklı bir değerle döner.
int _IOFBF
makro
Bu makronun değeri setvbuf işlevinin kip argümanında kullanılarak akımın tamamen tamponlanacağının belirtilmesini sağlayan bir tamsayı sabit ifadesidir.
int _IOLBF
makro
Bu makronun değeri setvbuf işlevinin kip argümanında kullanılarak akımın satır tamponlu olacağının belirtilmesini sağlayan bir tamsayı sabit ifadesidir.
int _IONBF
makro
Bu makronun değeri setvbuf işlevinin kip argümanında kullanılarak akımın tamponlanmayacağının belirtilmesini sağlayan bir tamsayı sabit ifadesidir.
int BUFSIZ
makro
Bu makronun değeri setvbuf işlevinin boyut argümanında kullanılmasının iyi olacağı bir tamsayı sabit ifadesidir. Bu değer en azından 256 değerini garantiler.
BUFSIZ değeri her sistemde akımın G/Ç verimliliğine uygun olarak seçilir. Bu bakımdan setvbuf çağrısında tampon boyu olarak BUFSIZ kullanmak iyi bir fikirdir.
Aslında, fstat sistem çağrısından elde edilen bir değerin tampon boyu olarak kullanılması daha da iyi olacaktır: Dosya özniteliklerinin st_blksize alanı bu değeri içerir. Bkz. Dosya Özniteliklerinin Anlamları.
Bazıları fgets (Karakter Girdilerinin Alınması) ile girdi alınması gibi durumlarda tamponların ayırma boyu olarak ayrıca BUFSIZ değerini de kullanırlar. G/Ç işlemlerinin verimli olmasını sağlamak dışında herhangi bir tamsayı değer yerine BUFSIZ kullanmanın geçerli bir sebebi yoktur.
void setbuf
(FILE *akım,
 char *tampon)
işlev
tampon argümanı bir boş gösterici olduğunda, bu işlev, setvbuf işlevinin kip argümanına _IONBF belirtilerek çağrılmasına eşdeğerdedir. Aksi takdirde setvbuf işlevinin boyut argümanında BUFSIZ ve kip argümanında _IOFBF kullanılarak tampon istendiği duruma eşdeğerdir.
setbuf işlevi eski kod ile uyumluluk için vardır. Yeni yazılımlarda setvbuf işlevini kullanmalısınız.
void setbuffer
(FILE  *akım,
 char  *tampon,
 size_t boyut)
işlev
tampon bir boş gösterici ise bu işlev, akım akımını tamponsuz yapar. Aksi takdirde, akım akımı tampon tamponuna tamamen tamponlanacaktır. boyut argümanı tampon tamponunun boyunu belirtmekte kullanılır.
Bu işlev eski BSD kodu ile uyumluluk için vardır. Yeni yazılımlarda setvbuf işlevini kullanmalısınız.
void setlinebuf
(FILE *akım)
işlev
Bu işlev akım akımını satır tamponlu yapar ve tamponu sizin için ayırır.
Bu işlev eski BSD kodu ile uyumluluk için vardır. Yeni yazılımlarda setvbuf işlevini kullanmalısınız.
Verilen bir akımın satır tamponlu mu yoksa Solaris’te standart-dışı ama GNU C kütüphanesinde mevcut işlevin kullanılmamış mı olduğu sorgulanabilir.
int __flbf
(FILE *akım)
işlev
__flbf işlevi, akım akımı satır tamponlu ise sıfırdan farklı bir değerle döner. Aksi takdirde sıfır ile döner.
Bu işlev stdio_ext.h başlık dosyasında bildirilmiştir.
Tampon boyunu ve ne kadarının kullanılmş olsuğunu sorgulayan iki işlev daha vardır ve bunlar Solaris’te de vardır.
size_t __fbufsize
(FILE *akım)
işlev
__fbufsize işlevi, akım akımının tampon boyu ile döner. Bu değer akım kullanımını eniyilemek için kullanılabilir.
Bu işlev stdio_ext.h başlık dosyasında bildirilmiştir.
size_t __fpending
(FILE *akım)
işlev
__fpending işlevi, çıktı tamponunda o an bulunan karakterlerin sayısı ile döner. Geniş karakterli tamponlar için bu boyut geniş karakter cinsindendir. Bu işlev okuma kipindeki ya da salt okunur açılmış tamponlarda kulllanılmamalıdır.
Bu işlev stdio_ext.h başlık dosyasında bildirilmiştir.
Önceki Üst Ana Başlık Sonraki
Tamponların Boşaltılması Başlangıç Diğer Akım Çeşitleri
Bir Linux Kitaplığı Sayfası