dup2函数

dup2函数用来复制一个现存的文件描述符

int dup2(int filedes, int filedes2);

若成功则返回新的文件描述符,若出错则返回-1.filedes2参数指定新描述符的数值,如果filedes2已经打开,则先将其关闭。如果filedes等于filedes2,则dup2返回filedes2,而不关闭它。

返回的新文件描述符与参数filedes共享同一个文件表项。

课后习题要求实现一个与dup2功能类似的函数,且不能使用fcntl函数。

先找到能够显式提供文件描述符的函数:open(若成功返回文件描述符),create(若成功则返回只写打开的文件描述符),dup(复制一个现存的文件描述符)。所以利用open函数获取文件描述符,然后选用dup函数进行复制。参考某位高手的代码:

#include "apue.h"
#include <fcntl.h>

int my_dup(const int file_flag,const int obj_flag)
{
     int i,n,top=0;
     int stack[MAXLINE];

     if(obj_flag>MAXLINE||obj_flag<3)//保证文件描述符符合要求
     {
         printf("obj_flag error!\n");
         return -1;
      }

     if(obj_flag==file_obj)
         return file_obj;

      while((n=dup(file_flag)<obj_flag))
     {
         if(-1==n)
         {
            printf("Copy failed");
            return -1;
          }

        stack[top++]=n;    //储存需要释放的文件描述符
      }

      close(obj_flag);

      if(-1==dup(file_flag))
      {
         printf("Dup failed\n");
         return  -1;
       }

       for(i=0;i<top;i++)
       {
          close(stack[i]);
        }

       return 1;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值