思路:用dup来实现dup2
程序:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int mydup2(int oldfd, int newfd)
{
int *p;
int i = 0;
if (oldfd == newfd)
return newfd;
close(newfd);
p = (int*)malloc(sizeof(int) * (newfd > oldfd ? newfd : oldfd));
do
{
p[i] = dup(oldfd);
}while(p[i++] < newfd -1);
newfd = dup(oldfd);
while(i)
{
if(p[--i] > 0)
close(p[i]);
}
free(p);
return newfd;
}
int main(int argc, char* argv[])
{
int newfd = -1;
newfd = mydup2(0, 5);
printf("The new fd is %d/n", newfd);
return 0;
}