這篇文章將為大家詳細講解有關(guān)實現(xiàn)的dup2( )函數(shù)的源碼怎么寫,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
成都創(chuàng)新互聯(lián)公司作為成都網(wǎng)站建設(shè)公司,專注網(wǎng)站建設(shè)公司、網(wǎng)站設(shè)計,有關(guān)企業(yè)網(wǎng)站設(shè)計方案、改版、費用等問題,行業(yè)涉及成都白烏魚等多個領(lǐng)域,已為上千家企業(yè)服務(wù),得到了客戶的尊重與認可。
原 dup2()函數(shù):
#includeint dup2( int fd, int fd2 );
對于 dup2,可以用 fd2 參數(shù)指定新描述符的值。如果 fd2 已經(jīng)打開,則先將其關(guān)閉。如若 fd 等于 fd2,則 dup2 返回 fd2,而不關(guān)閉它。否則,fd2 的 FD_CLOEXEC 文件描述符標志就被清除,這樣 fd2 在進程調(diào)用 exec 時是打開狀態(tài)。該函數(shù)返回的新文件描述符與參數(shù) fd 共享同一個文件表項。
下面是自己實現(xiàn)的 dup2函數(shù):
#include#include #include #include #include #include #include #include //檢查文件描述符是否有效 int isFileDescriptor( int fd ) { struct stat st; if( (-1 == fstat(fd,&st)) && (EBADF == errno) ) return -1; return 0; } int my_dup2( int oldfd, int newfd ) { int tempfd; int fd_count; int fdarray[newfd]; int res; if( -1 == isFileDescriptor( oldfd ) ) { printf("the file descriptor is invalid.\n"); return -1; } //如果newfd等于oldfd,則直接返回newfd,而不關(guān)閉它 if( oldfd == newfd ) return newfd; //否則,關(guān)閉newfd if( 0 == isFileDescriptor( newfd ) ) { res = close( newfd ); if( -1 == res ) { perror("close file descriptor failed"); return -1; } } //復制文件描述符 for( fd_count=0; fd_count 程序運行結(jié)果:
[zhang@localhost APUE]$ ./my_dup2
write to testfd 5 successfully
read from initial fd 3 is: Hey man!測試通過。
關(guān)于實現(xiàn)的dup2( )函數(shù)的源碼怎么寫就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
網(wǎng)站欄目:實現(xiàn)的dup2()函數(shù)的源碼怎么寫
瀏覽路徑:http://weahome.cn/article/pcside.html