2012-02-09 78 views
0

我需要幫助瞭解文件描述符如何恢復標準輸出的文件描述符?

因此,這裏是我的代碼:

int main() 
{ 
    char ch; 
    close(1); 
    //now opening a file so that it gets the lowest possible fd i.e. 1 
    int fd=open("txt",O_RDWR); 
    //check.. 
    printf("first printtf is executed\n"); 
    scanf("%c",&ch); 
    printf("ur value is %c\n",ch); 

    printf("second printf is executed\n"); 
    return 0; 
} 
在上面的程序

,我試過的printf輸出重定向到txt文件,而不是標準輸出,即終端。 但如何恢復標準輸出文件描述符,以便printf再次工作對於第二種情況爲正常,即第二printtf應該給僅輸出終端..

回答

4

做到這將是複製的最簡單方法關閉它之前的輸出描述符。你必須看看dup

0

關閉它之前,我想你想dup()它。 當你需要它時,你可以重複()dup。

DUP將始終使用最低描述

int out = dup(1); 
close(1); 
int fd = open(); 
... 
close(fd); 
dup(out); 
close(out); 

警告:這是從內存和未經考驗的;-)

+0

當DUP() - 荷蘭國際集團就「回」你必須使用DUP2複製的文件描述符__on__先前打開並關閉的'1'。 – Eregrith 2012-02-09 10:54:54

+0

如果你關閉FD不會重複仍然做? (沒有一個手冊頁方便檢查dup2) – John3136 2012-02-09 10:57:11

+0

嗯,對吧,也許dup()會將它重複爲1 ...我認爲它需要一個嘗試! – Eregrith 2012-02-09 11:04:21