2010-05-06 195 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