免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4784 | 回复: 6
打印 上一主题 下一主题

[函数] 《UNIX环境高级编程》中,编写一个与dup2功能相同的函数!不用fcntl() [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-30 13:22 |只看该作者 |倒序浏览
最近在读《UNIX环境高级编程》中,在第3章课后习题中,看见这样一个习题:

编写一个与
int dup2(int filedes1, int filedes2);
功能相同的函数!要求不调用fcntl()函数,并且要有正确的出错处理!

dup2函数就是用一个指定的文件描述符filedes2指定一个与filedes1相同的文件,如stdin 的文件描述符为0,那么调用
dup2(0,5);后,可以通过5也能操作stdin!

个人想法是在进程中开辟一个类似具有文件描述符的结构,然后让他指向一个文件表,这个文件表的V节点指向和filedes1指向的同一个V节点。。 。 感觉太麻烦了,而且还没有学到进程控制那一块,

不知如何解决,相信是个简单的问题,因为后面没有答案的!请大哥说明哈思路!

另:我在机器上装了内核源代码树,在切换到代码树目录下用了 grep -i "int dup2(int filedes1, int filedes2)" 命令,结果找不到这个函数在内核中的实现,如何在内核中找到该函数的实现呢?谢谢各位!

论坛徽章:
0
2 [报告]
发表于 2009-05-30 15:18 |只看该作者
可以用DUP不呢?

论坛徽章:
0
3 [报告]
发表于 2009-05-30 15:33 |只看该作者

回复 #2 ark211 的帖子

可以用dup函数的~

论坛徽章:
0
4 [报告]
发表于 2009-05-30 16:00 |只看该作者

回复 #1 foryin 的帖子

你这样 grep 当然 grep 不到,你需要找的只是 sys_dup2()。
http://oldlinux.org/lxr/http/source/fs/fcntl.c?v=0.95#L36

论坛徽章:
0
5 [报告]
发表于 2009-05-30 16:46 |只看该作者
能用dup就一直dup到所要求的那个文件描述符。

论坛徽章:
0
6 [报告]
发表于 2009-05-30 17:19 |只看该作者
原帖由 langue 于 2009-5-30 16:00 发表
你这样 grep 当然 grep 不到,你需要找的只是 sys_dup2()。
http://oldlinux.org/lxr/http/source/fs/fcntl.c?v=0.95#L36


那么复杂干嘛,出题的意思就是让他用dup完成。

论坛徽章:
0
7 [报告]
发表于 2009-06-03 20:26 |只看该作者
用dup,如何制定我想要的那个filedes呢。。用5楼的方法我也想过·~就是。。不太!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP