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]); } }
转自
相关文章推荐
- Myeclipse10+Egit+bitbucket实现版本控制
- 234. Palindrome Linked List java leetcode
- 练习三 1005
- 基因数据处理31之avocado运行avocado-cli中的avocado问题3-变异识别找不到RecordGroupSample(null)
- 返回键失效,返回上一级
- 概率分类法
- 尾递归
- json和pickle
- 第十/十一周项目二(1)-储存班长信息的学生类
- 设计师必看中文字体排版法则
- 练习三 1003
- {题解}[jzoj1021]【中山市选2008】矩阵
- EM算法
- Axis实现 web service接口开发 + 客户端调用
- 在eclipse里卸载已安装的插件[例如Android Development Tools ADT]
- 获取Windows系统版本号
- 注释转换
- CRC检错技术原理
- 2016 女生赛 1002 Desert
- 数值分析中的高斯—塞德尔迭代算法