思路:用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;
}
这里也有相同的实现思路:http://www.fzitshow.com/redirect.php?tid=12219&goto=lastpost
本文介绍了一种使用dup系统调用来实现dup2功能的方法。通过动态分配内存并利用循环调用dup,可以关闭旧文件描述符,并将指定的文件描述符复制到新的位置。这种方法有效地实现了dup2的功能。
1195

被折叠的 条评论
为什么被折叠?



