LINUX下dup2的實現

來源:互聯網
上載者:User

這是一道UNIX環境進階編程的課後習題,要求不得使用fcntl,自己始終想不出效率比較高的寫法,這裡貼一下自己的做法,希望有大俠們能告訴我一種高效率的寫法。


#include "apue.h"#include "fcntl.h"int new_dup2(int oldfd, int newfd){int fd_list[newfd] , i = 0, j = 0;printf("oldfd is %d and newfd is %d\n",oldfd,newfd);if (oldfd == newfd) return oldfd;/*if(close(newfd) == -1){printf("close newfd err\n");return 0;}*/for (i = 0; i < newfd; i++){//printf("i = %d\n",i);if((fd_list[i] = dup(oldfd)) == -1){printf("dup err\n");break;}//printf("fd_list[i] = %d\n",fd_list[i]);if(fd_list[i] == newfd){printf("fd_list i = %d\n",i);break;}}for(j = 0; j<i ;j++) close(fd_list[j]); return fd_list[i];}int main(){int fd,dest_fd = 33,fd1;char *path = "open_fd" ;fd = open(path,O_RDWR|O_CREAT);if(fd == -1) {printf("open file err \n");return 0;}else{printf("open file %d success \n",fd);}if((fd1 = new_dup2(fd,dest_fd)) != dest_fd){printf("Copy fd err : %d\n",fd1);return 0;}write(fd1,path,sizeof(path));return 1;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.