Hayır, 's ISO davranış POSIX davranışı değil (tamam, bu ise ancak sadece ölçüde onlar ISO uygun olarak POSIX davranışı).
Etkileşimli bir cihaza atıfta bulunulduğu tespit edilebiliyorsa, standart çıktı satır tamponludur, aksi takdirde tamamen tamponludur. Yani printf
, gönderilecek yeni bir satır alsa bile, akmayacak durumlar vardır , örneğin:
myprog >myfile.txt
Bu, verimlilik için anlamlıdır, çünkü bir kullanıcıyla etkileşime giriyorsanız muhtemelen her satırı görmek isterler. Çıktıyı bir dosyaya gönderiyorsanız, büyük olasılıkla diğer ucunda bir kullanıcı yoktur (imkansız olmasa da, dosyayı işliyor olabilirler). Şimdi verebilir kullanıcı her karakteri görmek istediğini ancak iki sorunlar olduğunu savunuyorlar.
Birincisi, çok verimli olmaması. İkincisi, orijinal ANSI C görevinin yeni davranışı icat etmek yerine öncelikle mevcut davranışı kodlamak olduğu ve bu tasarım kararlarının ANSI süreci başlatmadan çok önce alındığıydı. Günümüzde ISO bile standartlarda mevcut kuralları değiştirirken çok dikkatli davranmaktadır.
Bununla nasıl başa çıkılacağı konusunda, fflush (stdout)
hemen görmek istediğiniz her çıkış çağrısından sonra, sorunu çözecektir.
Alternatif olarak, setvbuf
çalıştırmadan önce stdout
, arabelleksiz olarak ayarlamak için kullanabilirsiniz ve tüm bu fflush
satırları kodunuza eklemek konusunda endişelenmenize gerek kalmaz :
setvbuf (stdout, NULL, _IONBF, BUFSIZ);
Sadece eğer Performansın biraz etkileyebilir unutmayın olan bir dosyaya çıktı gönderme. Ayrıca, bu desteğin standart tarafından garanti edilmeyen uygulama tanımlı olduğunu unutmayın.
ISO C99 bölümü 7.19.3/3
ilgili bittir:
Bir akış arabelleğe alınmadığında , karakterlerin kaynaktan veya hedeften en kısa zamanda görünmesi amaçlanır. Aksi takdirde karakterler birikebilir ve ana bilgisayar ortamına / ortamından bir blok olarak iletilebilir.
Bir akış tamamen arabelleğe alındığında , karakterlerin bir arabellek doldurulduğunda bir ana bilgisayar ortamına veya bloktan iletilmesi amaçlanır.
Bir akış satır arabelleğe alındığında , karakterlerin yeni satır karakteri ile karşılaşıldığında ana bilgisayar ortamına veya ana ortamdan bir blok olarak iletilmesi amaçlanır.
Ayrıca, karakterlerin bir arabellek dolduğunda, arabelleksiz bir akışta giriş istendiğinde veya ana bilgisayar ortamından karakterlerin iletilmesini gerektiren bir satır arabellek akışında giriş istendiğinde ana bilgisayar ortamına bir blok olarak iletilmesi amaçlanır. .
Bu özellikler için destek uygulama tanımlıdır ve setbuf
ve setvbuf
işlevlerinden etkilenebilir .