Comment pourrais-je redirect temporairement stdout vers un fichier dans un programme C?

Dans mon programme C, j’aimerais redirect temporairement STDOUT vers “/ dev / null” (par exemple). Ensuite, après avoir écrit sur “/ dev / null”, je souhaite restaurer STDOUT. Comment je gère ça?

Sur les systèmes POSIX, vous pouvez le faire comme suit:

int bak, new; fflush(stdout); bak = dup(1); new = open("/dev/null", O_WRONLY); dup2(new, 1); close(new); /* your code here ... */ fflush(stdout); dup2(bak, 1); close(bak); 

Ce que vous voulez n’est pas possible en général.

Toute solution utilisant freopen est fausse, car elle ne vous permet pas de restaurer le stdout origine. Toute solution par affectation à stdout est fausse, car stdout n’est pas une lvalue (c’est une macro qui se développe en une expression de type FILE * ).