在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() 的函数
最新推荐文章于 2020-09-29 21:21:20 发布