在Unix高級環境編程一書中,第三章末尾有這麼一個習題:
3.2 編寫一個與3.12節中dup2功能相同的函數,要求不調用fcntl函數,並且要有正確的出錯處理。
沒有找到好的解決方法,目前想到的方法是利用dup()遍歷fd命名空間至目標fd,返回結果。代碼如下:
int mydup2(int oldfd, int newfd) { if (newfd == oldfd) return newfd; int *fdp = (int *)malloc(sizeof(int)*newfd); int i = 0; if (close(newfd) == -1 && errno != EBADF) err_sys("close newfd error."); while ((fdp[i] = dup(oldfd)) != newfd) { if (fdp[i] == -1) err_sys("dup error."); ++i; } for (--i; i >= 0; --i) { if (close(fdp[i]) == -1) err_sys("close fdp error."); } free(fdp); return newfd; }
如果有錯誤,歡迎指正。
一個功能類似於dup2() 的函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.