- 论坛徽章:
- 0
|
实现一个自己的简单文件系统.
在实现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 编辑 ] |
|