- 论坛徽章:
- 0
|
要求完成一个与dup2功能相同的函数,不能用fcntl函数。
我的方法比较笨,是用dup函数,循环复制描述符,直到新生成的描述符和指定的相同。除此之外实在想不到生成指定描述符的方法。
如果大家有什么好方法,请指导一二,感激不尽。下面是我实现的一个函数,感觉除了笨一点,应该没有什么问题。
int MyDup2(int oldfd,int newfd)
14 {
15 if (oldfd == newfd)
16 {
17 return newfd;
18 }
19
20 if (close(newfd) == -1)
21 {
22 if (errno != EBADF)
23 return -1;
24 }
25
26 int aiFd[OPEN_MAX] = {0};
27
28 int i = 0;
29 for(; i < OPEN_MAX; i++)
30 {
31 int iFd = dup(oldfd);
32
33 if (iFd == -1)
34 return -1;
35 if (iFd == newfd)
36 break;
37 aiFd[i] = iFd;
38 }
39
40 for (int k = 0; k < i; k++)
41 {
42 close(aiFd[k]);
43 }
44
45 return newfd;
46 } |
|