Czy wszelki jeden współpracownik mi zrozumieć ten kod c??

R

raj_rohit10

Guest
Poniżej podane drukuje tylko hello-kod błędu pewnego czasu potem masowe wydruki hello-out ...
co jest powodem tego? Jeżeli dodaję \ n w fprintf wtedy działa dobrze ...

# include <stdio.h>
# include <unistd.h>
int main ()
(
while (1)
(

fprintf (stdout, "hello-out");
printf ( "hello-err");
sleep (1);
)
return 0;
)
Wyjście z tego kodu jest Solaris Sparc Machine: hello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello -
errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello -
errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello -
errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello -
errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello -
errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello -
errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello -
errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello -
errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello -
errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello-errhello -
errhello-errhello-errhello-errhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello -
outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello -
outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello -
outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello -
outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello -
outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello -
outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello -
outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello -
outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello -
outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello-outhello -
outhello-outhello-out
Chociaż jak na c należy: hello-outhello-errhello-outhello-errhello-outhello-errhello-outhello-er ...
dzięki za odpowiedź z góry
Rohit Raj

 
Dzieje się tak dlatego standardowe wyjście jest buforowane.Możesz wymusić na stdout rzeczy które mają być drukowane bezpośrednio za pomocą fflush ();

Patrz "fflush człowieka" szczegóły ...

 
ale u mnie wyjaśnić dlaczego ten problem występuje, gdy jest używana z stderr?

 
Piszesz do dwóch różnych strumieni wyjściowych.C nie narzuca, jak strumienie powinny bufora swoich danych.Wiele wdrożeń wybierać żadnego buforowania na stderr i tłumienie linii na standardowe wyjście.Twoje stdout Wydaje się, że 1024 bajtowy bufor linii, więc będzie to wyjście się nieskończenie długiej linii w 1024 byte kawałków.Jeśli chcesz mieszać stderr i stdout, a następnie użyć fflush () lub \ n, aby uzyskać rozsądny porządek.

 
Czy jest jakiś sposób na kompilację, co usunie buforowanie stdout?

 
setbuf i funkcje setvbuf powodować bufora buf wykorzystywane do I / O buforowanie
zamiast automatycznie przydzielonego buforu.

void setbuf (FILE * stream, char * buf);
int setvbuf (FILE * stream, char * buf, int type, int rozmiar);

Z tych funkcji, można zmienić rozmiar bufora związanego strumieniu pliku i rodzaj zmian buforowania.

 

Welcome to EDABoard.com

Sponsor

Back
Top