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

全部博文(94)

文章存档

2017年(19)

2016年(30)

2015年(12)

2014年(33)

我的朋友

分类: LINUX

2014-09-17 11:17:46

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》
阅读(1800) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~