Cプログラム内で、STDOUTを一時的に「/ dev/null」にリダイレクトしたいと思います(たとえば)。次に、「/ dev/null」に書き込んだ後、STDOUTを復元したいと思います。これをどのように管理しますか?
POSIXシステムでは、次のように実行できます。
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);
あなたが望むことは、さらに一般的には不可能です。
freopen
を使用するソリューションは、元のstdout
を復元できないため、間違っています。 stdout
は左辺値ではないため、stdout
に代入することによる解決策はすべて間違っています(これは、タイプFILE *
の式に展開されるマクロです)。