免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8710 | 回复: 17

[函数] UNIX环境下,如何实现dup2函数,不允许调用fcntl? [复制链接]

论坛徽章:
0
发表于 2007-04-26 22:51 |显示全部楼层
RT

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2007-04-26 22:58 |显示全部楼层
dup2本来就应该是一个系统调用级函数。
我想你说的这个应该是APUE里的题目吧。
我来给你说说思路。
先close掉需要产生的fd
连续dup,每dup一次产生的新的fd记录下来。
当新产生的fd等于需要产生的fd的时候,把前面产生的fd全都close掉,返回。

论坛徽章:
0
发表于 2007-04-26 23:12 |显示全部楼层
原帖由 cjaizss 于 2007-4-26 22:58 发表
dup2本来就应该是一个系统调用级函数。
我想你说的这个应该是APUE里的题目吧。
我来给你说说思路。
先close掉需要产生的fd
连续dup,每dup一次产生的新的fd记录下来。
当新产生的fd等于需要产生的fd的时候,把 ...

int dup2(int orig, int new);
每次dup操作应该都是对orig进行的吧
这样就会有多个file descriptor指向同一个file table entry,那么close这些fd的时候,实际上都是关闭同一个file table entry指向的文件。这样重复关闭多次会出问题吗?

论坛徽章:
0
发表于 2007-04-26 23:13 |显示全部楼层
原帖由 cjaizss 于 2007-4-26 22:58 发表
dup2本来就应该是一个系统调用级函数。
我想你说的这个应该是APUE里的题目吧。
我来给你说说思路。
先close掉需要产生的fd
连续dup,每dup一次产生的新的fd记录下来。
当新产生的fd等于需要产生的fd的时候,把 ...


虽然我不知道怎么解决楼主的问题,但是我感觉这样的办法貌似不可行~~

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2007-04-26 23:14 |显示全部楼层
这种close没什么问题的,只是掐掉一个计数而已。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2007-04-26 23:16 |显示全部楼层
原帖由 converse 于 2007-4-26 23:13 发表


虽然我不知道怎么解决楼主的问题,但是我感觉这样的办法貌似不可行~~

为什么不可行呢?给个理由先

论坛徽章:
0
发表于 2007-04-26 23:17 |显示全部楼层

回复 5楼 cjaizss 的帖子

哦,多谢
还是这里回复快,CSDN上半天都没人回

论坛徽章:
0
发表于 2007-04-26 23:19 |显示全部楼层
我第一次看到这个函数的时候,首先想到的方法也是先打开,然后关闭不用的

请问为什么不行呢???

论坛徽章:
0
发表于 2007-04-26 23:20 |显示全部楼层
原帖由 cjaizss 于 2007-4-26 23:16 发表

为什么不可行呢?给个理由先


感觉这种办法太粗鲁了点~~

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2007-04-26 23:22 |显示全部楼层
原帖由 net_robber 于 2007-4-26 23:19 发表
我第一次看到这个函数的时候,首先想到的方法也是先打开,然后关闭不用的

请问为什么不行呢???

我觉得除了我那种没有别的好办法,因为生成新的fd的系统调用级别函数除了dup,fcntl只有open,creat,dup,管道,以及socket、accept,当然还有域套接字传递和有的操作系统实现ioctl父子进程传递fd(在这里完全用不到),所以也只有dup可用了

[ 本帖最后由 cjaizss 于 2007-4-27 00:01 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP