2012-02-09 16 views
0

は、私はファイルディスクリプタ標準出力のファイル記述子を復元するには?

を理解する助けが必要だからここに私のコードです:、私はむしろ、標準出力よりもtxtファイルにprintfの出力をリダイレクトしようとした上記のプログラムで

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; 
} 

、ターミナル。 しかし、再び端末のみに出力を与えるべき二printtfすなわち第2のケースのために通常通りに動作しprintfように..複製することになり、これを行うために

答えて

4

最も簡単な方法は、標準出力ファイル記述子を復元する方法出力ディスクリプタを閉じる前にdupをご覧ください。

0

閉じる前に、dup()したいと思う。 それが必要なときは、dupをdup()することができます。

DUPは常に最低の記述子を使用します

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

警告:これは、メモリおよびテストされていない;-)からである

+0

DUP()するとき - それをINGのは、「バック」あなたが複製するdup2のを使用する必要がありますファイル記述子__on__は以前に開いて閉じた '1'です。 – Eregrith

+0

もしあなたがfdを閉じてもdupはやっていないでしょうか? (dup2を調べるのに便利なマニュアルページはありません) – John3136

+0

まあ、おそらくdup()は1にダップします...私は試しが必要だと思います! – Eregrith

関連する問題