您的位置:首页 > 其它

dup2()功能实现

2016-05-28 15:50 375 查看
//用dup()来返回文件描述符,直到符合要求的为止,最后再把不符合要求的关闭
//当输入的描述符是负的或者已超过MAX_OPEN时,会出错
#include <unistd.h>//dup()
#include <stdio.h>
#include <stdlib.h>
#define OPEN_MAX 256
int my_dup2(int, int);
int main(int argc, char *argv[])
{
int newfd, return_fd;
if(argc != 2)
{
printf("格式:./a.out test.txt\n");
exit(0);
}
printf("请输入你要设置复制的描述符: ");
scanf("%d", &newfd);
//打开一个文件
int fd = open(argv[1], 0);//打开一个文件准备复制
if(fd == -1)
{
perror(argv[1]);//打印错误信息
exit(0);
}
printf("原来的文件描述符是: %d\n", fd);
return_fd = my_dup2(fd, newfd);
printf("之后的文件描述符是: %d\n");
close(fd);
close(return_fd);
exit(0);
}
int my_dup2(int fd, int newfd)
{
int count = 0;
int fdarry[newfd];  //记录打开的描述符
if(newfd < 0 || newfd > OPEN_MAX)
{
printf("你设置的新描述符有误!\n");
exit(0);
}

if((fdarry[count] = dup(fd)) == -1)//返回当前最小未用的文件描述符
{
printf("dup()函数出错!\n");
exit(0);
}
else//的是为了测试原文件描述符是否可用
{
close(fdarry[count]);
}
if(fd == newfd)//如果新设置的与原来的相等则直接接返回原来的
{
return fd;
}
close(newfd);//关闭要复制的文件描述符
//当运行下面的代码时说明用户设置的文件描述符与一开始的并不相同
for(count = 0; count <= newfd; count++)
{
fdarry[count] = dup(fd);//返回当前可用的最小文件描述符
if(fdarry[count] == -1)
{
printf("dup()出错!\n");
exit(0);
}
else
{
printf("for里面的描述符为: %d\n", fdarry[count]);
if(fdarry[count] == newfd)
break;
}
}
for(count = 0; count <= newfd; count++)
{
if(fdarry[count] == newfd)
return fdarry[count];
else
close(fdarry[count]);
}
}


转自
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: