2010-05-06 352 views
1
stdinBackup = 4; 
    dup2(0, stdinBackup); 

目前我正在做上面的'備份'stdin,以便它可以在其他地方重定向後從備份中恢復。我有一種感覺,我做了很多錯誤? (例如,任意指定4肯定是不正確的)。任何人都指向正確的方向?創建備份文件描述符?

回答

4

如果您只是想自己製作一個通用副本,則不需要使用dup2()。只需使用普通的dup()

#include <stdio.h> 

int stdinBackup = dup(STDIN_FILENO); 

你只需要使用dup2()當你關心的重複的實際值。

關於符號常量STDIN_FILENO的定義,請參見here,這比在代碼中使用裸體0好得多。

+0

我沒有理由使用'STDIN_FILENO'代替0,當POSIX所有時間固定爲0時。 – 2010-07-26 12:25:33

+0

@R:甚至沒有可讀性?我想說的是,當談到正在發生的事情時,STDIN_FILENO比純0更有幫助。避免神奇的數字,以及所有這些。 – unwind 2010-07-29 19:27:28

+0

我對你不瞭解,但是我的眼睛/大腦可以更容易和快速地區分0/1/2,而不是從醜陋的全部大寫的STDxxx_FILENO中挖掘出xxx(IN/OUT/ERR)。 – 2010-07-29 20:01:46