免费注册 查看新帖 |

Chinaunix

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

[函数] 刚学C,看unix高级环境编程,做了个练习(写dup2功能相当的函数) [复制链接]

sipingal 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-11 16:14 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2006-04-13 18:16 |只看该作者
我刚好也看到这一节。。。
不过我认为你这个程序错了。。。
例如:
    else if (filedes2 < filedes)
    {
        close(filedes2);
        filedes2 = dup(filedes);
        return(filedes2);
    }
这里dup返回的是当前可用文件描述符中的最小数值。例如可用的最小数是4,filedes = 6, filedes2 = 5
这样返回的是4,DUP2函数返回的值就是4,而不是指定的5。
我也是这个问题不知道如何解决。。。。望高人指点。。

这个程序后面还有错误,比如循环中的opendes++,这样会关掉其他已打开的文件。。。

论坛徽章:
0
3 [报告]
发表于 2007-03-12 17:40 |只看该作者
int test_dup(int fd1,int fd2){
    /* dup2(fd1,fd2) */
    int fd=0;
    int array_fd[100];
    int i=0;

    printf(" dup2(%d,%d) \n", fd1, fd2);
    if((fd1 < 0) || (fd2 < 0) || fd2 > 100){
        err_sys(" Please check file_id. ");
        exit(1);
    }
    fd = dup(fd1);
    if(fd < 0){
        err_sys(" the file id has no corresponding file ");
        exit(1);
    }
    while(fd < fd2){
        i++;
        if(i == 100){
            err_sys(" open to much file ");
            exit(1);
        }
        array_fd[i]=fd;
        fd = dup(fd1);
        if (fd < 0) {
            err_sys(" can't open it ");
        }
        printf("fd = %d \n", fd);
    }
    if(fd > fd2){
        close(fd2);
        fd = dup(fd1);
    }
    for(;i>=0;i--){
        close(array_fd[i]);
    }
    return fd;
}

论坛徽章:
0
4 [报告]
发表于 2013-07-20 15:48 |只看该作者
楼主,我在想,你把第18号的    else if (filedes2 < filedes)改成    else if (filedes2 < dup(filedes))是不是更好,假如,我们闲着无聊,先用自己用的函数,把文件描述符改成10,然后又改成8,假如我们第一次打开时是4.那在执行第二次函数时,是不是5-9都是没有被打开的?如果你这样写的话,在我们第二次调用(假设我们要在8中打开),那这样的话,系统就会认为8已经被打开了,但是其实并没有被打开。所以我觉得把  else if (filedes2 < filedes)改成    else if (filedes2 < dup(filedes))是不是更好?我也是个新手,有错请指出,谢谢

论坛徽章:
0
5 [报告]
发表于 2013-07-20 15:49 |只看该作者
{:3_188:}无语了,忘记看时间了,俺这算不算挖坟了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP