folder Tahribat.com Forumları
linefolder C - C++
linefolder C Buffered Unbuffered IO



C Buffered Unbuffered IO

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    blackseaboy28
    blackseaboy28's avatar
    Kayıt Tarihi: 07/Ağustos/2011
    Erkek

    Merhaba müridler,

    Gecen hafta katılmadığım derste işlenmiş galiba ve hoca ödevini de vermiş .(buffered ve unbuffered sürelerini tutma karşılaştırma vs..)

    Şimdi bizim normalde okuma yazma yaptığımız yöntem buffered mı yoksa unbuffered mı? Diğeri(hangisiyse) nasıl kullanılıyor?Diğerinin mantığı ne?Birbirlerine göre avantajları , dezavantajları ne?

    Şimdiden teşekkürler.

     


    Mobil uygulama geliştirilir.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    CnkGn
    CnkGn's avatar
    Kayıt Tarihi: 09/Ocak/2011
    Erkek

    işletim sistemleri mi ders?


    yo yo yo 1-4-8-3 to the 3 to the 6 to the 9 representing the abq. what up biaatch! leave at the tone...
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    blackseaboy28
    blackseaboy28's avatar
    Kayıt Tarihi: 07/Ağustos/2011
    Erkek
    CnkGn bunu yazdı

    işletim sistemleri mi ders?

    Hayır programlama dilleri :D


    Mobil uygulama geliştirilir.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    blackseaboy28
    blackseaboy28's avatar
    Kayıt Tarihi: 07/Ağustos/2011
    Erkek

    güncel


    Mobil uygulama geliştirilir.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nick6
    0x656e
    0x656e's avatar
    Kayıt Tarihi: 19/Mayıs/2012
    Homo

    Summon @Tugberk , @sandman , @yeniharman belki de @FireX

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    niRvana_GG
    niRvana_GG's avatar
    Kayıt Tarihi: 01/Kasım/2012
    Erkek

    -> IO işlemleri genellikle dosya tabanlı gerçekleştirildiği için, dosyaya yazma veya okuma yapmak istediğin zaman sistem fonksiyonu çağırmak zorundasın. Bu sistem fonksiyonuna olan çağrı programı o anda kernel moduna sokar ki bu da IO yoğun bir programda göreli olarak bir yavaşlamaya sebep olur. Kernel moduna geçiş sayısını azaltmak için dosya fonksiyonları bir cache tutar ve cache stratejisine göre okuma ve yazma işlemini öncelikli olarak buraya yapar. (Normalde bunlar cache'tir ancak terminolojide buffer olarak geçiyor). Yani eğer tampon var ise sen dosyaya birşey yazmak istediğin zaman öncelikle bu tampona yazılır, tamponun moduna göre (line bufferd ya da full buffered durumlarında) yani tampon dolunca veya new line görülünce tampon boşaltılır.

    C standartlarında belirtilen line buffer, no buffer, full buffer olmak üzere 3 tür tamponlama(buffer) türü vardır.

    Line Bufferd: Yeni satır görünce tampon boşaltılır

     

    Full Bufferd: Tampon dolunca boşaltılır.

    ->Varsayılan olarak hangi tamponlamanın kullanılacağı standartlarda sadece stdin ,stdout ve stderr dosya akımları için kısmi olarak belirtilmekte.

    -> Avantajları, dezavantajları için konuşursak, tam tamponlamalı modda olduğunu düşünelim dosyanın, sen yazma işlemi gerçekleştirdin ama program normal olmayan yollardan sonlandırıldı bu durumda dosyaya tampondaki bilgiler yazılamayacak, ama avantajı ise dosya ile ilgili çok fazla işlem yapılıyor ise göreceli olarak program hızlanır.(her dosyanın buffer'ı kendinedir). No buffered modda ne yazarsan yaz hemen ilgili dosyaya yazılacaktır vs (genel hatları ile). Ayrıca bazen tampon kullanmamak zorunda olduğun durumlarda olabilir. Bu durumlarda da setbuf, setvbuf gibi fonksiyonları kullanarak istediğin tamponlama modunu seçebilirsin (dosya açılır açılmaz, dosya ile ilgili işlem yapmadan önce).

     

    niRvana_GG tarafından 13/Ara/15 20:35 tarihinde düzenlenmiştir
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    256 mb ramli pcde 1 GB zip dosyasını çıkarmanı sağlayan şey, buffered'tır misal

    IDM gibi programlarda ayarını görürsün buffer_size diye, hdd'nin anasını sikmemek için ram'de tutacağı miktardır (üstte arkadaşın dediği doldukça boşaltan)

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    blackseaboy28
    blackseaboy28's avatar
    Kayıt Tarihi: 07/Ağustos/2011
    Erkek
    niRvana_GG bunu yazdı

    -> IO işlemleri genellikle dosya tabanlı gerçekleştirildiği için, dosyaya yazma veya okuma yapmak istediğin zaman sistem fonksiyonu çağırmak zorundasın. Bu sistem fonksiyonuna olan çağrı programı o anda kernel moduna sokar ki bu da IO yoğun bir programda göreli olarak bir yavaşlamaya sebep olur. Kernel moduna geçiş sayısını azaltmak için dosya fonksiyonları bir cache tutar ve cache stratejisine göre okuma ve yazma işlemini öncelikli olarak buraya yapar. (Normalde bunlar cache'tir ancak terminolojide buffer olarak geçiyor). Yani eğer tampon var ise sen dosyaya birşey yazmak istediğin zaman öncelikle bu tampona yazılır, tamponun moduna göre (line bufferd ya da full buffered durumlarında) yani tampon dolunca veya new line görülünce tampon boşaltılır.

    C standartlarında belirtilen line buffer, no buffer, full buffer olmak üzere 3 tür tamponlama(buffer) türü vardır.

    Line Bufferd: Yeni satır görünce tampon boşaltılır

     

    Full Bufferd: Tampon dolunca boşaltılır.

    ->Varsayılan olarak hangi tamponlamanın kullanılacağı standartlarda sadece stdin ,stdout ve stderr dosya akımları için kısmi olarak belirtilmekte.

    -> Avantajları, dezavantajları için konuşursak, tam tamponlamalı modda olduğunu düşünelim dosyanın, sen yazma işlemi gerçekleştirdin ama program normal olmayan yollardan sonlandırıldı bu durumda dosyaya tampondaki bilgiler yazılamayacak, ama avantajı ise dosya ile ilgili çok fazla işlem yapılıyor ise göreceli olarak program hızlanır.(her dosyanın buffer'ı kendinedir). No buffered modda ne yazarsan yaz hemen ilgili dosyaya yazılacaktır vs (genel hatları ile). Ayrıca bazen tampon kullanmamak zorunda olduğun durumlarda olabilir. Bu durumlarda da setbuf, setvbuf gibi fonksiyonları kullanarak istediğin tamponlama modunu seçebilirsin (dosya açılır açılmaz, dosya ile ilgili işlem yapmadan önce).

     

    Teşekkürler hocam.

    1-)Tampon boşaltılır derken kastetiğin şey yazmaya başlaması dimi yanlıs anlamamısımdır ins.

    2-)Bizim simdi dosyayı acıp fprintf ile yazmamız, fscanf ile okumamız unbuffered oluyor.

    3-)Buffer kullanma olayı nasıl oluyor peki. buffer diye dizi olusturup normal sekilde (putc,fputc kullanarak) yazmamız buffered olur mu yoksa baska fonksiyonları mı var? 

    İyi akşamlar hocam :D

     

     


    Mobil uygulama geliştirilir.
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    niRvana_GG
    niRvana_GG's avatar
    Kayıt Tarihi: 01/Kasım/2012
    Erkek
    blackseaboy28 bunu yazdı
    niRvana_GG bunu yazdı

    -> IO işlemleri genellikle dosya tabanlı gerçekleştirildiği için, dosyaya yazma veya okuma yapmak istediğin zaman sistem fonksiyonu çağırmak zorundasın. Bu sistem fonksiyonuna olan çağrı programı o anda kernel moduna sokar ki bu da IO yoğun bir programda göreli olarak bir yavaşlamaya sebep olur. Kernel moduna geçiş sayısını azaltmak için dosya fonksiyonları bir cache tutar ve cache stratejisine göre okuma ve yazma işlemini öncelikli olarak buraya yapar. (Normalde bunlar cache'tir ancak terminolojide buffer olarak geçiyor). Yani eğer tampon var ise sen dosyaya birşey yazmak istediğin zaman öncelikle bu tampona yazılır, tamponun moduna göre (line bufferd ya da full buffered durumlarında) yani tampon dolunca veya new line görülünce tampon boşaltılır.

    C standartlarında belirtilen line buffer, no buffer, full buffer olmak üzere 3 tür tamponlama(buffer) türü vardır.

    Line Bufferd: Yeni satır görünce tampon boşaltılır

     

    Full Bufferd: Tampon dolunca boşaltılır.

    ->Varsayılan olarak hangi tamponlamanın kullanılacağı standartlarda sadece stdin ,stdout ve stderr dosya akımları için kısmi olarak belirtilmekte.

    -> Avantajları, dezavantajları için konuşursak, tam tamponlamalı modda olduğunu düşünelim dosyanın, sen yazma işlemi gerçekleştirdin ama program normal olmayan yollardan sonlandırıldı bu durumda dosyaya tampondaki bilgiler yazılamayacak, ama avantajı ise dosya ile ilgili çok fazla işlem yapılıyor ise göreceli olarak program hızlanır.(her dosyanın buffer'ı kendinedir). No buffered modda ne yazarsan yaz hemen ilgili dosyaya yazılacaktır vs (genel hatları ile). Ayrıca bazen tampon kullanmamak zorunda olduğun durumlarda olabilir. Bu durumlarda da setbuf, setvbuf gibi fonksiyonları kullanarak istediğin tamponlama modunu seçebilirsin (dosya açılır açılmaz, dosya ile ilgili işlem yapmadan önce).

     

    Teşekkürler hocam.

    1-)Tampon boşaltılır derken kastetiğin şey yazmaya başlaması dimi yanlıs anlamamısımdır ins.

    2-)Bizim simdi dosyayı acıp fprintf ile yazmamız, fscanf ile okumamız unbuffered oluyor.

    3-)Buffer kullanma olayı nasıl oluyor peki. buffer diye dizi olusturup normal sekilde (putc,fputc kullanarak) yazmamız buffered olur mu yoksa baska fonksiyonları mı var? 

    İyi akşamlar hocam :D

     

     

    1) İlgili tamponun boşaltılması demek, tamponda tutulan bilgilerin hard diskteki dosyaya yazılması demek. (hızlı bellekten, dosyanın aslının mevcut olduğu yavaş belleğe aktarılıyor)

    2) Onun ne olduğu belli değil ama genellikle full buffered. Yani o tampon bölgenin belirli bir uzunluğu var bu dolunca tampon boşaltılıyor. Sen fscanf yaptığın zaman ilk önce buffera bakar dosya buffer'a çekilmiş mi diye varsa okur, yoksa dosyadan okur.  Aynısı fprintf içinde geçerli.

    (Sen C Buffered Unbufferd yazdığın için ben dosya fonksiyonlarının kullandığı buffer mekanizmasını anlıyorum)

    Tampon ile alakalı bir örnek verirsek daha iyi anlaşılabilir:

    int main(int argc, char *argv[])
    {
    
    	FILE *fp;
    	char teststr[] = "asdasdasdasdasd\n";
    
    	if ((fp = fopen("D:\\Test\\test.txt", "w")) == NULL)
    		exit(EXIT_FAILURE);
    
    
    	if (setvbuf(fp, NULL, _IOFBF, BUFSIZ) == 0)
    		printf("Tampon degistirildi\n");
    	
    	fwrite(teststr, strlen(teststr), sizeof(char), fp);
    	while (1)
    		;
    
    	return 0;
    }

    setvbuf fonksiyonu ile dosyayı tam tamponlu hale getiriyoruz, eğer programı kapatmadan dizine girip bakarsan dosyaya birşey yazılmadığını görürsün çünkü tamponunun boşaltılmasını tetikleyecek birşey olmadı ancak _IONBF (_IO No Buffered) ile değiştirirsen dosyaya yazının yazıldığını görürsün.

    3) Buffer direkt olarak senin kullanımın için değil, C dosya fonksiyonlarının kendi içsel kullanımı için. Bufferın hangi modda olucağına sen karar verirsin, bazı durumlarda nerenin buffer olarak kullanılacağına da.

Toplam Hit: 2373 Toplam Mesaj: 9
c okuma yazma buffered unbuffered