2011-01-28 95 views

回答

47

在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 *類型表達式的宏)。

+0

請勿使用dup2。使用close(new)然後dup(1); dup()確保你會得到正確的描述符。 `如果newfd是打開的,則會在close() 時間報告的任何錯誤都將丟失。一個細心的程序員不會使用dup2,而不會先關閉 newfd。 ` – 2012-03-11 21:30:35

相關問題