Flash Notes

Interpréteur de commandes - Redirection de la sortie standard et de la sortie standard d'erreurs


• Comment afficher des messages sur stdout et stderr depuis un programme C ?

Solution

Utiliser printf() et fprintf()

Programme

/* Programme out_err.c */

#include <stdio.h>

int main()
{
printf("STDOUT\n");
fprintf(stderr, "STDERR\n");
return 0;
}

Exemple 1

$ out_err
STDOUT
STDERR

• Comment rediriger les sorties vers des fichiers differents ?

Solution

Utiliser > et 2>

Exemple 1

$ out_err > /tmp/out 2> /tmp/err
$ cat /tmp/out
STDOUT
$ cat /tmp/err
STDERR

• Comment rediriger les sorties vers le même fichier ?

Solution

Utiliser > puis 2>&1

Exemple 1

$ out_err > /tmp/out_err.out 2>&1
$ cat /tmp/out_err.out 
STDERR
STDOUT

• Comment faire pour que les messages affichés sur stdout et stderr apparaissent dans le même ordre à l'écran et dans le fichier lorsqu'ils sont redirigés ?

Solution

Utiliser setvbuf() dans le programme C

Programme

/* Programme out_err_nbuf.c */

#include <stdio.h>

int main()
{
setvbuf(stdout, (char *) 0, _IONBF, 0);

printf("STDOUT\n");
fprintf(stderr, "STDERR\n");
return 0;
}

Exemple 1

$ out_err_nbuf > /tmp/out_err_nbuf.out 2>&1
$ cat /tmp/out_err_nbuf.out 
STDOUT
STDERR