2010-12-31 15 views

risposta

34

stderr non viene reindirizzato a stdout. Entrambi i flussi sono solo collegati allo stesso dispositivo (la schermata o il terminale corrente) per impostazione predefinita.

È possibile reindirizzare al file diversi:

$ command > stdout.log 2> stderr.log 

Al fine di reindirizzare in realtà stderr a stdout, si deve lanciare:

$ command 2>&1 
0

Come stdout, stderr si dirige soprattutto l'uscita dispositivo della console standard (generalmente, lo schermo). Ciò significa che stderr non viene reindirizzato a stdout ma condividono un descrittore di file comune. È possibile reindirizzare stderr in un'altra destinazione all'interno di un programma utilizzando la funzione freopen.

+4

Bene, tecnicamente non condividono nemmeno un descrittore di file: 'stdout' è' fd 1' e 'stderr' è' fd 2'. –

+0

Fd di stdout è 1 e fd os stderr è 2 allora come possono condividere fd? – user559208

+2

@ user559208, non lo fanno. Ognuno ha il proprio descrittore di file. –

5

Non lo è; succede solo che sia stdout che stderr sono tipicamente mappati allo stesso flusso di output (solitamente la console). Ad esempio, se reindirizzate lo stdout a un file, troverete che lo stderr rimane indirizzato alla console.

Il punto importante è che sono ridimensionabili in modo indipendente.

Problemi correlati