1

我正在尝试了解 Linux 如何处理 EXT3 文件。我正在查看fs/ext3/file.c存在处理文件的文件操作的位置:

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,
};

例如,我怎样才能找到 .open 何时被函数“dquot_file_open”替换?我应该遵循以下定义的系统调用fs/open.c

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

还是我应该看看其他功能?

我正在为用户模式 ​​Linux 开发 Linux 3.7.6

4

1 回答 1

2

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

系统open(2)调用通过找出struct file_operations手头文件系统的相关信息并调用其open成员来间接调用它。

我建议您查看kernelnewbies页面以获得整体视图和更详细的帮助。

于 2013-05-08T12:18:01.230 回答