Chinaunix首页 | 论坛 | 博客
  • 博客访问: 158784
  • 博文数量: 34
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 317
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-04 12:49
个人简介

专注于服务器开发技术

文章分类

全部博文(34)

文章存档

2015年(5)

2014年(29)

我的朋友

分类: LINUX

2014-08-21 21:01:36

dup2函数用于复制文件描述符(fd),它的函数原型:
int dup2(int oldfd, int newfd);
3 . 2 编写一个同3 . 1 2节中的dup2功能相同的函数,要求不调用f c n t l函数并且要有正确的
出错处理.

递归实现:

点击(此处)折叠或打开

  1. int mydup2(int oldfd, int newfd)
  2. {
  3.     int tfd;
  4.     if(newfd <0)
  5.         return -1;
  6.     if(newfd == oldfd)
  7.         return newfd;
  8.     close(newfd);
  9.     if( (tfd = dup(oldfd) ) == newfd)
  10.     {
  11.         return newfd;

  12.     }else{
  13.         mydup2(oldfd,newfd);
  14.         close(tfd);
  15.     }
  16.     return newfd;

  17. }
迭代实现:

点击(此处)折叠或打开

  1. int mydup2(int oldfd, int newfd)
  2. {
  3.     if(newfd < 0)
  4.         return -1;
  5.     if(newfd == oldfd)
  6.         return newfd;
  7.     close(newfd);
  8.     int tfd;
  9.     while(1)
  10.     {
  11.         tfd = dup(oldfd);
  12.         if( tfd == newfd)
  13.         {
  14.             return newfd;
  15.         }
  16.         else
  17.         {
  18.             tfd = dup(oldfd);
  19.             close(tfd);
  20.         }
  21.     }
  22.     return newfd;
  23. }


参考:《UNIX环境高级编程第三章文件I/O》
阅读(4416) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~