2013-01-24 63 views
3

我在我的代碼的開始處將以下內容重定向到stdout文件。而不是將發送到stdout的字符串重定向到文件,而是希望將字符串發送到這兩個 stdout和該文件。我如何從我的代碼中做到這一點?dup2而不是重定向

int main(int argc, char** argv) 
{ 
    int file = open("out.txt", O_APPEND | O_WRONLY); 
    if(file < 0) return 1; 
    if(dup2(file,1) < 0) return 1; 
    ... 
} 

UPDATE

請不是我的代碼是用printf等C函數寫入標準輸出。

回答

3

打開管道到tee,然後寫入。

// be careful to quote the file argument properly! 
FILE *fp = popen("tee out.txt", "w"); 

無法在POSIX系統中的文件描述符或stdio級別獲得所需的行爲。

0

如果你想讓它與printf工作,我只能看到兩種可能性:要麼打印只標準輸出,並使用tee實用程序也寫的一切到一個文件外,或寫圍繞printf的包裝這就要求printf兩次,一次用於寫入文件,一次用於寫入stdout(以及用於在代碼中用於打印到stdout的每個其他c函數)。你只能用dup/dup2來做你想做的事。

相關問題