2010-12-31 16 views

Odpowiedz

34

nie jest przekierowany do stdout. Oba strumienie są domyślnie podłączone tylko do tego samego urządzenia (bieżącego ekranu lub terminala).

można przekierować je do różnych plikach:

$ command > stdout.log 2> stderr.log 

Aby rzeczywiście przekierować stderr do stdout, trzeba wydać:

$ command 2>&1 
0

Jak stdout, stderr jest zazwyczaj kierowany do wyjścia urządzenie standardowej konsoli (zazwyczaj ekran). Oznacza to, że stderr nie jest przekierowywany do stdout, ale ma wspólny deskryptor pliku. Możliwe jest przekierowanie stderr do innego miejsca docelowego z poziomu programu przy użyciu funkcji freopen.

+4

Cóż, technicznie nie udostępniają one nawet deskryptora pliku: 'stdout' to' fd 1', a 'stderr' to' fd 2'. –

+0

Fd of stdout to 1, a fd os stderr to 2, to jak mogą udostępnić fd? – user559208

+2

@ user559208, nie robią tego. Każdy ma własny deskryptor pliku. –

5

Nie jest; tak się składa, że ​​zarówno standardowe wyjście, jak i standardowe wyjście są zwykle odwzorowywane na ten sam strumień wyjściowy (zwykle konsola). Jeśli przekierujesz standardowe wyjście do pliku, na przykład stderr pozostaje skierowany do konsoli.

Ważne jest, że są one niezależnie przekierowywane.

Powiązane problemy