Chinaunix首页 | 论坛 | 博客
  • 博客访问: 308694
  • 博文数量: 94
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 202
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-08 20:07
文章分类

全部博文(94)

文章存档

2017年(19)

2016年(30)

2015年(12)

2014年(33)

我的朋友

分类: LINUX

2014-09-19 13:50:13


点击(此处)折叠或打开

  1. int my_dup2(int fd, int fd2)
  2. {
  3.     int *tmp, *fdarray;
  4.     int newfd;
  5.     
  6.     if ((fd2 < 0) || (fd < 0)) {
  7.         printf("fd/fd2 error!\n");
  8.         return -1;
  9.     }
  10.     
  11.     if (fd == fd2) {
  12.         return fd2;
  13.     }
  14.     /* 若不相等则关闭该描述符,并申请内存空间用于存储接下来打开的不等于fd2的文件描述符 */
  15.     close(fd2);
  16.     fdarray = (int *)malloc(fd2);
  17.     tmp = fdarray;
  18.     memset(tmp, -1, fd2);
  19.     
  20.     while (1) {
  21.         newfd = dup(fd);
  22.         if (newfd == fd2) {
  23.             break;
  24.         } else {
  25.             *tmp++ = newfd;
  26.         }
  27.     }
  28.     /* 关闭不等于fd2的文件描述符fd */
  29.     for (tmp = fdarray; *tmp != -1; tmp++) {
  30.         close(*tmp);
  31.     }
  32.     free(fdarray); /* 释放不相符fd数组所占的内存 */
  33.     
  34.     return newfd;
  35. }

阅读(1811) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~