23
在我的C程序中,我想暫時將STDOUT重定向到「/ dev/null」(例如)。然後在寫入「/ dev/null」之後 我想恢復STDOUT。我如何管理這個?我怎麼能臨時重定向標準輸出到C程序中的文件?
在我的C程序中,我想暫時將STDOUT重定向到「/ dev/null」(例如)。然後在寫入「/ dev/null」之後 我想恢復STDOUT。我如何管理這個?我怎麼能臨時重定向標準輸出到C程序中的文件?
在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 *
類型表達式的宏)。
請勿使用dup2。使用close(new)然後dup(1); dup()確保你會得到正確的描述符。 `如果newfd是打開的,則會在close() 時間報告的任何錯誤都將丟失。一個細心的程序員不會使用dup2,而不會先關閉 newfd。 ` – 2012-03-11 21:30:35