读书人

《UNIX环境高级编程》札记-自己实现du

发布时间: 2013-09-17 13:35:59 作者: rapoo

《UNIX环境高级编程》笔记--自己实现dup2

自己编写一个与dup2功能相同的函数,要求不调用fcntl函数,并且要有正确的出错处理。

#include <stdio.h>#include <unistd.h>int main(void){        int fd = -1;        fd = mydup2(0,10);        if(fd < 0){                perror("mydup2");                return -1;        }        printf("fd = %d\n",fd);        return 0;}int mydup2(int fd, int newfd){//判断fd和newfd的范围是否正确        if(fd < 0 || fd > 256){                printf("fd is wrong.\n");                return -1;        }        if(newfd <0 || newfd > 256){                printf("newfd is wrong.\n");                return -1;        }        int index = 0;        int fdarray[newfd];//判断fd是否已经被打开。        if((fdarray[index] = dup(fd)) == -1){                printf("error while dup.\n");                return -1;        }else{                close(fdarray[index]);        }        //如果相等,则直接返回。        if(fd == newfd){                return fd;        }//将newfd关闭close(newfd);//获取所要的newfd        int newfdindex;        for(index=0; index<=newfd; index++){                fdarray[index] = dup(fd);                if(fdarray[index] == -1){                        printf("error while dup.\n");                        return -1;                }else{                        if(fdarray[index] == newfd){                                newfdindex = index;                                break;                        }                }        }//将之前打开的fd都关闭        for(index=0; index<newfdindex; index++){                close(fdarray[index]);        }        return fdarray[newfdindex];}

读书人网 >编程

热点推荐