免费注册 查看新帖 |

Chinaunix

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

文件系统实现的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-06 11:01 |只看该作者 |倒序浏览
实现一个自己的简单文件系统.
在实现dentry 的file_operations中readdir成员函数时,可以查看到标准文件系统中大部分都是这么实现的:
static int
adfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
{
        struct inode *inode = filp->f_path.dentry->d_inode;
        struct super_block *sb = inode->i_sb;
        struct adfs_dir_ops *ops = ADFS_SB(sb)->s_dir;
        struct object_info obj;
        struct adfs_dir dir;
        int ret = 0;

        lock_kernel();       

        if (filp->f_pos >> 32)
                goto out;

        ret = ops->read(sb, inode->i_ino, inode->i_size, &dir);
        if (ret)
                goto out;

        switch ((unsigned long)filp->f_pos) {
        case 0:
                if (filldir(dirent, ".", 1, 0, inode->i_ino, DT_DIR) < 0)
                        goto free_out;
                filp->f_pos += 1;

        case 1:
                if (filldir(dirent, "..", 2, 1, dir.parent_id, DT_DIR) < 0)
                        goto free_out;
                filp->f_pos += 1;

        default:
                break;
        }

                 ....
}

在应用层调用ls directory/ -al 时会调用该函数, 从实现来说readdir就是读取dir结点对应的内容并以一定的格式filldir输出.
现在我想问的是什么时候readdir会停止被调用,因为从实践来看,这个readdir函数是被多次调用的.ls依据什么判断不需要再次调用
readdir

[ 本帖最后由 realwerw 于 2008-11-6 11:08 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP