2013-05-08 44 views
1

我想要了解Linux如何处理EXT3文件。 我在看fs/ext3/file.c那里有与文件处理文件操作存在:EXT3文件操作

const struct file_operations ext3_file_operations = { 
    .llseek   = generic_file_llseek, 
    .read   = do_sync_read, 
    .write   = do_sync_write, 
    .aio_read  = generic_file_aio_read, 
    .aio_write  = generic_file_aio_write, 
    .unlocked_ioctl = ext3_ioctl, 
#ifdef CONFIG_COMPAT 
    .compat_ioctl = ext3_compat_ioctl, 
#endif 
    .mmap   = generic_file_mmap, 
    .open   = dquot_file_open, 
    .release  = ext3_release_file, 
    .fsync   = ext3_sync_file, 
    .splice_read = generic_file_splice_read, 
    .splice_write = generic_file_splice_write, 
}; 

我怎么能找到什么时候。开由函数“dquot_file_open”,例如更换? 我应该遵循fs/open.c定义的系统调用:

SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode) 

或者我应该看什么其他功能?

我在Linux上工作3.7.6用户模式Linux的

回答

2

Linux内核是一个面向对象的方式组织(虽然用C语言编写)。 struct file_operations实际上是一个类,成员(函数指针)是类的函数成员(Java头的“方法”)。您引用的代码用于通过填充函数指针来设置ext3对象。这是在编译/链接时完成的。

系统调用open(2)通过查找与当前文件系统相关的struct file_operations并调用其open成员来间接调用此方法。

我建议你看看kernelnewbies页面,以获得全面的看法和更详细的帮助。

+0

是的我知道这些信息。我的问题是open函数与EXT3的“file_operations”交互的地方在哪里? – user19570 2013-05-08 13:43:18