Üye Kayıt Üye Giriş

Standart C Fonksiyonlarının Tamponlaması ve Bunun fork İşlemine Yansıması


Standart C Fonksiyonlarının Tamponlaması ve Bunun fork İşlemine Yansıması

Bilindiği gibi standart C fonksiyonları kütüphane içerisinde ayrı bir tamponlama uygularlar.
Standart dosya fonksiyonları kullanıldığında bu durum göz önünde bulundurulmalıdır, çünkü
örneğin fork işleminden önce standart C fonksiyonlarıyla dosyaya bir şeyler yazılmış olabilir,
ancak henüz tampon dolmadığı için bunlar dosyaya write fonksiyonuyla aktarılmamış olabilir.
Bu noktada fork yapıldığında tüm bellek alanının kopyası oluşturulduğu için bu tampon
bölgelerin de kopyası alt process için oluşturulmuş olacaktır. Böylece üst ve alt process'lerde
fork işleminden önce tamponda bulunanlar ilk tazeleme işlemi ile iki kez hedef aygıta
aktarılacaktır. Bu tür durumlarda iyi bir kontrol uygulanmazsa pek çok potansiyel problem
çıkabilir. Bu nedenle fork işleminden önce standart dosya fonksiyonları kullanılacaksa şu
önlemler alınmalıdır:


1) fork işleminden önce dosya tamamen kapatılabilir.
2) fork işleminden önce dosya fflush fonksiyonuyla flush edilebilir.
3) En başta tamponlamasız moda geçilerek işlemler yapılabilir.

Default olarak stdout standart C fonksiyonları için ya tamponlamasız çalışır ya da satır
tamponlaması yapmaktadır (standartlara göre başlangıçta default olarak stdout tam
tamponlama kullanamaz). Standart C kütüphanelerinin çoğu stdout dosyasını default olarak
tamponlamasız modda kullanmaktadır. Bazı kütüphaneler (GNU libc) satır tamponlamalı
olarak kullanır, ama stdin gerektiren dosya işlemlerinde stdout dosyasını da flush eder. Bu
durumda aşağıdaki kod problemli olacaktır:


int main(void)
{
printf("bir");
fork();
printf("iki\n");
return 0;
}
Burada default stdout için satır tamponlaması yapan standart C kütüphanelerinde ekrana
biriki
biriki
yazısı çıkar.

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER