Aşağıdaki kod için tam sonucu elde etmek için stdout'un arabelleğe alınmasını devre dışı bırakmak istiyorumC'deki stdout'un arabelleğe alınması nasıl kapatılır
while(1) {
printf(".");
sleep(1);
}
'.' sadece tampon doldurulduğunda.
Aşağıdaki kod için tam sonucu elde etmek için stdout'un arabelleğe alınmasını devre dışı bırakmak istiyorumC'deki stdout'un arabelleğe alınması nasıl kapatılır
while(1) {
printf(".");
sleep(1);
}
'.' sadece tampon doldurulduğunda.
fflush(stdout)
'u kullanın. Arabelleği temizlemek için her printf
'dan sonra çağırabilirsiniz. parametresi olarak stdout
setvbuf(stdout, NULL, _IONBF, 0);
Bu gerçekten "C'deki stdout'un arabelleğe alınmasını kapatmaz". – hagello
Sen
write(1, ".", 1);
yerine
printf(".");
Sen setvbuf function kullanabilirsiniz yapabilirsiniz.
İyi biri. Teşekkürler. Bu arada setbuf (stream, NULL); 'setvbuf (stream, NULL, _IONBF, BUFSIZ) 'a eşdeğerdir;' – sehe
Tek uyarı: ** setbuf' veya 'setvbuf' kelimesini ** ilk olarak çağırmak yasaldır ** Herhangi bir giriş veya çıkış yapılmadan önce bir akışta işlem yapılması. Böylece, "fflush" ifadesinin kullanılması genellikle daha iyi bir fikirdir. –
Kullanım fflush (FILE * akım):
Ayrıca her şeyi
Bu çok iyi bir cevap değil, Newlib'den alıntı: 'Hem ANSI C hem de Sistem V Arabirim Tanımlaması (Sorun 2), <
Neden 'fflush (stdout)' ilgilenecek
Bu setbuf kullanabilir? –
olası bir kopyası var [Bir satırsonu dizgisinde yer almadığı sürece baskı neden aramadan sonra temizlenmiyor? (C)] (http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin) – DarkDust
StackOverflow * 'da en çok sorulan sorular için aday. – DarkDust