- 转自 http://blog.csdn.net/todd911/article/details/11747097
- #include <stdio.h>
- #include <unistd.h>
-
- int main(void){
- int fd = -1;
- fd = mydup2(0,10);
- if(fd < 0){
- perror("mydup2");
- return -1;
- }
-
- printf("fd = %d\n",fd);
- return 0;
- }
-
- int mydup2(int fd, int newfd){
-
- if(fd < 0 || fd > 256){
- printf("fd is wrong.\n");
- return -1;
- }
-
- if(newfd <0 || newfd > 256){
- printf("newfd is wrong.\n");
- return -1;
- }
-
- int index = 0;
- int fdarray[newfd];
-
- if((fdarray[index] = dup(fd)) == -1){
- printf("error while dup.\n");
- return -1;
- }else{
- close(fdarray[index]);
- }
-
-
- if(fd == newfd){
- return fd;
- }
-
-
- close(newfd);
-
- int newfdindex;
- for(index=0; index<=newfd; index++){
- fdarray[index] = dup(fd);
- if(fdarray[index] == -1){
- printf("error while dup.\n");
- return -1;
- }else{
- if(fdarray[index] == newfd){
- newfdindex = index;
- break;
- }
- }
- }
-
- for(index=0; index<newfdindex; index++){
- close(fdarray[index]);
- }
-
- return fdarray[newfdindex];
- }
自己实现dup2
原文:http://www.cnblogs.com/QingCHOW/p/4596826.html