码迷,mamicode.com
首页 > 其他好文 > 详细

自己实现dup2

时间:2015-06-24 10:34:58      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

    1.  转自  http://blog.csdn.net/todd911/article/details/11747097
  1. #include <stdio.h>  
  2. #include <unistd.h>  
  3.   
  4. int main(void){  
  5.         int fd = -1;  
  6.         fd = mydup2(0,10);  
  7.         if(fd < 0){  
  8.                 perror("mydup2");  
  9.                 return -1;  
  10.         }  
  11.   
  12.         printf("fd = %d\n",fd);  
  13.         return 0;  
  14. }  
  15.   
  16. int mydup2(int fd, int newfd){  
  17.         //判断fd和newfd的范围是否正确  
  18.         if(fd < 0 || fd > 256){  
  19.                 printf("fd is wrong.\n");  
  20.                 return -1;  
  21.         }  
  22.   
  23.         if(newfd <0 || newfd > 256){  
  24.                 printf("newfd is wrong.\n");  
  25.                 return -1;  
  26.         }  
  27.   
  28.         int index = 0;  
  29.         int fdarray[newfd];  
  30.         //判断fd是否已经被打开。  
  31.         if((fdarray[index] = dup(fd)) == -1){  
  32.                 printf("error while dup.\n");  
  33.                 return -1;  
  34.         }else{  
  35.                 close(fdarray[index]);  
  36.         }  
  37.           
  38.         //如果相等,则直接返回。  
  39.         if(fd == newfd){  
  40.                 return fd;  
  41.         }  
  42.           
  43.         //将newfd关闭  
  44.         close(newfd);  
  45.         //获取所要的newfd  
  46.         int newfdindex;  
  47.         for(index=0; index<=newfd; index++){  
  48.                 fdarray[index] = dup(fd);  
  49.                 if(fdarray[index] == -1){  
  50.                         printf("error while dup.\n");  
  51.                         return -1;  
  52.                 }else{  
  53.                         if(fdarray[index] == newfd){  
  54.                                 newfdindex = index;  
  55.                                 break;  
  56.                         }  
  57.                 }  
  58.         }  
  59.         //将之前打开的fd都关闭  
  60.         for(index=0; index<newfdindex; index++){  
  61.                 close(fdarray[index]);  
  62.         }  
  63.   
  64.         return fdarray[newfdindex];  
  65. }  

自己实现dup2

标签:

原文地址:http://www.cnblogs.com/QingCHOW/p/4596826.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!