日期:2014-05-16  浏览次数:20651 次

UNIX环境下,如何实现dup2函数,不允许调用fcntl?
RT

------解决方案--------------------
dup2不是函数吧,是系统调用!这是OS实现的!
------解决方案--------------------
帮你写了一个,已经测试过了。可以用dup来实现dup2

int replace_dup2(int oldfd,int newfd){
char *p=(char*)malloc(newfd> oldfd?newfd:oldfd);
int i=0;
do{ p[i]=dup(newfd); } while(p[i++] <newfd);
close(newfd);
newfd=dup(oldfd);
while(i) {
if(p[--i]> 0)
close(p[i]);
}
free(p);
return newfd;
}